diff --git a/.github/actions/migration/action.yaml b/.github/actions/migration/action.yaml index eddec9a9da..2c06172153 100644 --- a/.github/actions/migration/action.yaml +++ b/.github/actions/migration/action.yaml @@ -13,5 +13,5 @@ runs: invoke export-records -f data.json python3 ./src/backend/InvenTree/manage.py flush --noinput invoke migrate - invoke import-records -c -f data.json - invoke import-records -c -f data.json + invoke import-records -c -f data.json --strict + invoke import-records -c -f data.json --strict diff --git a/.github/actions/setup/action.yaml b/.github/actions/setup/action.yaml index 38ac61834c..3c7526de71 100644 --- a/.github/actions/setup/action.yaml +++ b/.github/actions/setup/action.yaml @@ -15,6 +15,10 @@ inputs: required: false description: 'Install the InvenTree requirements?' default: 'false' + static: + required: false + description: 'Should the static files be built?' + default: 'false' dev-install: required: false description: 'Install the InvenTree development requirements?' @@ -103,3 +107,7 @@ runs: if: ${{ inputs.update == 'true' }} shell: bash run: invoke update --skip-backup --skip-static + - name: Collect static files + if: ${{ inputs.static == 'true' }} + shell: bash + run: invoke static --skip-plugins diff --git a/.github/scripts/check_exported_data.py b/.github/scripts/check_exported_data.py new file mode 100644 index 0000000000..d7fb78083a --- /dev/null +++ b/.github/scripts/check_exported_data.py @@ -0,0 +1,101 @@ +"""Script to check a data file exported using the 'export-records' command. + +This script is intended to be used as part of the CI workflow, +in conjunction with the "workflows/import_export.yaml" workflow. + +In reads the exported data file, to ensure that: + +- The file can be read and parsed as JSON +- The file contains the expected metadata +- The file contains the expected plugin configuration +- The file contains the expected plugin database records + +""" + +PLUGIN_KEY = 'dummy_app_plugin' +PLUGIN_SLUG = 'dummy-app-plugin' + +import argparse +import json +import os + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Check exported data file') + parser.add_argument('datafile', help='Path to the exported data file (JSON)') + + args = parser.parse_args() + + if not os.path.isfile(args.datafile): + print(f'Error: File not found: {args.datafile}') + exit(1) + + with open(args.datafile, encoding='utf-8') as f: + try: + data = json.load(f) + print(f'Successfully loaded data from {args.datafile}') + print(f'Number of records: {len(data)}') + except json.JSONDecodeError as e: + print(f'Error: Failed to parse JSON file: {e}') + exit(1) + + found_metadata = False + found_installed_apps = False + found_plugin_config = False + plugin_data_records = {} + + # Inspect the data and check that it has the expected structure and content. + for entry in data: + # Check metadata entry for expected values + if entry.get('metadata', False): + print('Found metadata entry') + found_metadata = True + + expected_apps = ['InvenTree', 'allauth', 'dbbackup', PLUGIN_KEY] + + apps = entry.get('installed_apps', []) + + for app in expected_apps: + if app not in apps: + print(f'- Expected app "{app}" not found in installed apps list') + exit(1) + + found_installed_apps = True + + elif entry.get('model', None) == 'plugin.pluginconfig': + key = entry['fields']['key'] + + if key == PLUGIN_SLUG: + print(f'Found plugin configuration for plugin "{PLUGIN_KEY}"') + found_plugin_config = True + + elif entry.get('model', None) == f'{PLUGIN_KEY}.examplemodel': + key = entry['fields']['key'] + value = entry['fields']['value'] + + plugin_data_records[key] = value + + if not found_metadata: + print('Error: No metadata entry found in exported data') + exit(1) + + if not found_installed_apps: + print( + f'Error: Plugin "{PLUGIN_KEY}" not found in installed apps list in metadata' + ) + exit(1) + + if not found_plugin_config: + print(f'Error: No plugin configuration found for plugin "{PLUGIN_KEY}"') + exit(1) + + # Check the extracted plugin records + expected_keys = ['alpha', 'beta', 'gamma', 'delta'] + + for key in expected_keys: + if key not in plugin_data_records: + print( + f'Error: Expected plugin record with key "{key}" not found in exported data' + ) + exit(1) + + print('All checks passed successfully!') diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 7b1a727718..3a986873f1 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -42,7 +42,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # pin@v3.0.2 + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # pin@v4.0.1 id: filter with: filters: | @@ -168,13 +168,13 @@ jobs: echo "git_commit_date=$(git show -s --format=%ci)" >> $GITHUB_ENV - name: Set up QEMU if: github.event_name != 'pull_request' - uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # pin@v3.7.0 + uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # pin@v4.0.0 - name: Set up Docker Buildx if: github.event_name != 'pull_request' - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # pin@v3.12.0 + uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # pin@v4.0.0 - name: Set up cosign if: github.event_name != 'pull_request' - uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # pin@v4.0.0 + uses: sigstore/cosign-installer@cad07c2e89fa2edd6e2d7bab4c1aa38e53f76003 # pin@v4.1.1 - name: Check if Dockerhub login is required id: docker_login run: | @@ -185,14 +185,14 @@ jobs: fi - name: Login to Dockerhub if: github.event_name != 'pull_request' && steps.docker_login.outputs.skip_dockerhub_login != 'true' - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # pin@v3.7.0 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # pin@v4.0.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Log into registry ghcr.io if: github.event_name != 'pull_request' - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # pin@v3.7.0 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # pin@v4.0.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -201,7 +201,7 @@ jobs: - name: Extract Docker metadata if: github.event_name != 'pull_request' id: meta - uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # pin@v5.10.0 + uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # pin@v6.0.0 with: images: | inventree/inventree diff --git a/.github/workflows/import_export.yaml b/.github/workflows/import_export.yaml new file mode 100644 index 0000000000..a2670b77a3 --- /dev/null +++ b/.github/workflows/import_export.yaml @@ -0,0 +1,120 @@ +# Ensure that data import / export functionality works as expected. +# - Create a dataset in a Postgres database (including plugin data) +# - Export the dataset to an agnostic format (JSON) +# - Import the dataset into a Sqlite database + +name: Import / Export + +on: + push: + branches-ignore: ["l10*"] + pull_request: + branches-ignore: ["l10*"] + +permissions: + contents: read + +env: + python_version: 3.11 + + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + INVENTREE_DEBUG: false + INVENTREE_LOG_LEVEL: WARNING + INVENTREE_MEDIA_ROOT: /home/runner/work/InvenTree/test_inventree_media + INVENTREE_STATIC_ROOT: /home/runner/work/InvenTree/test_inventree_static + INVENTREE_BACKUP_DIR: /home/runner/work/InvenTree/test_inventree_backup + INVENTREE_SITE_URL: http://localhost:8000 + + INVENTREE_PLUGINS_ENABLED: true + INVENTREE_AUTO_UPDATE: true + INVENTREE_PLUGINS_MANDATORY: "dummy-app-plugin" + INVENTREE_GLOBAL_SETTINGS: '{"ENABLE_PLUGINS_APP": true}' + + DATA_FILE: /home/runner/work/InvenTree/test_inventree_data.json + + INVENTREE_DB_ENGINE: postgresql + INVENTREE_DB_NAME: inventree + INVENTREE_DB_USER: inventree + INVENTREE_DB_PASSWORD: password + INVENTREE_DB_HOST: "127.0.0.1" + INVENTREE_DB_PORT: 5432 + +jobs: + + paths-filter: + name: filter + runs-on: ubuntu-latest + outputs: + server: ${{ steps.filter.outputs.server }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 + with: + persist-credentials: false + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # pin@v4.0.1 + id: filter + with: + filters: | + server: + - .github/workflows/import_export.yaml + - .github/scripts/check_exported_data.py + - 'src/backend/**' + - 'tasks.py' + test: + runs-on: ubuntu-latest + needs: paths-filter + if: needs.paths-filter.outputs.server == 'true' || contains(github.event.pull_request.labels.*.name, 'full-run') + + services: + postgres: + image: postgres:17 + env: + POSTGRES_USER: inventree + POSTGRES_PASSWORD: password + ports: + - 5432:5432 + + steps: + - name: Checkout code + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 + with: + fetch-depth: 0 + persist-credentials: false + - name: Environment Setup + uses: ./.github/actions/setup + with: + apt-dependency: gettext poppler-utils libpq-dev + pip-dependency: psycopg + update: true + static: false + - name: Setup Postgres Database + run: | + invoke migrate + invoke dev.setup-test -i + - name: Create Plugin Data + run: | + pip install -U inventree-dummy-app-plugin + invoke migrate + cd src/backend/InvenTree && python manage.py create_dummy_data + - name: Export Postgres Dataset + run: | + invoke export-records -o -f ${{ env.DATA_FILE }} + python .github/scripts/check_exported_data.py ${{ env.DATA_FILE }} + invoke dev.delete-data --force + - name: Update Environment Variables for Sqlite + run: | + echo "Updating environment variables for Sqlite" + echo "INVENTREE_DB_ENGINE=sqlite" >> $GITHUB_ENV + echo "INVENTREE_DB_NAME=/home/runner/work/InvenTree/test_inventree_db.sqlite3" >> $GITHUB_ENV + - name: Setup Sqlite Database + run: | + invoke migrate + test -f /home/runner/work/InvenTree/test_inventree_db.sqlite3 || (echo "Sqlite database not created" && exit 1) + - name: Import Sqlite Dataset + run: | + invoke import-records -c -f ${{ env.DATA_FILE }} --strict + cd src/backend/InvenTree && python manage.py check_dummy_data + - name: Export Sqlite Dataset + run: | + invoke export-records -o -f ${{ env.DATA_FILE }} + python .github/scripts/check_exported_data.py ${{ env.DATA_FILE }} diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 6b3a9cb590..26186948d0 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -47,7 +47,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # pin@v3.0.2 + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # pin@v4.0.1 id: filter with: filters: | @@ -222,7 +222,7 @@ jobs: echo "Downloaded api.yaml" - name: Running OpenAPI Spec diff action id: breaking_changes - uses: oasdiff/oasdiff-action/diff@1c611ffb1253a72924624aa4fb662e302b3565d3 # pin@main + uses: oasdiff/oasdiff-action/diff@1f38ea5ea0b4a2e4e49901c3bcdf4386a05e9ea1 # pin@main with: base: "api.yaml" revision: "src/backend/InvenTree/schema.yml" @@ -284,7 +284,7 @@ jobs: - name: Create artifact directory run: mkdir -p artifact - name: Download schema artifact - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # pin@v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # pin@v8.0.1 with: path: artifact merge-multiple: true @@ -341,6 +341,7 @@ jobs: apt-dependency: gettext poppler-utils dev-install: true update: true + static: true npm: true - name: Download Python Code For `${WRAPPER_NAME}` run: git clone --depth 1 https://github.com/inventree/${WRAPPER_NAME} ./${WRAPPER_NAME} @@ -362,7 +363,7 @@ jobs: pip install . if: needs.paths-filter.outputs.submit-performance == 'true' - name: Performance Reporting - uses: CodSpeedHQ/action@dbda7111f8ac363564b0c51b992d4ce76bb89f2f # pin@v4 + uses: CodSpeedHQ/action@1c8ae4843586d3ba879736b7f6b7b0c990757fab # pin@v4 # check if we are in inventree/inventree - reporting only works in that OIDC context if: github.repository == 'inventree/InvenTree' && needs.paths-filter.outputs.submit-performance == 'true' with: @@ -398,6 +399,7 @@ jobs: apt-dependency: gettext poppler-utils dev-install: true update: true + static: true - name: Data Export Test uses: ./.github/actions/migration - name: Test Translations @@ -413,7 +415,7 @@ jobs: path: .coverage retention-days: 14 - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # pin@v5.5.2 + uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # pin@v6.0.0 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -452,7 +454,7 @@ jobs: env: node_version: '>=20.19.0' - name: Performance Reporting - uses: CodSpeedHQ/action@dbda7111f8ac363564b0c51b992d4ce76bb89f2f # pin@v4 + uses: CodSpeedHQ/action@1c8ae4843586d3ba879736b7f6b7b0c990757fab # pin@v4 with: mode: walltime run: inv dev.test --pytest @@ -500,6 +502,7 @@ jobs: pip-dependency: psycopg django-redis>=5.0.0 dev-install: true update: true + static: true - name: Run Tests run: invoke dev.test --check --translations - name: Data Export Test @@ -548,6 +551,7 @@ jobs: pip-dependency: mysqlclient dev-install: true update: true + static: true - name: Run Tests run: invoke dev.test --check --translations - name: Data Export Test @@ -593,7 +597,7 @@ jobs: - name: Run Tests run: invoke dev.test --check --migrations --report --coverage --translations - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # pin@v5.5.2 + uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # pin@v6.0.0 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -702,7 +706,7 @@ jobs: npm: true install: true update: true - apt-dependency: postgresql-client libpq-dev + apt-dependency: gettext postgresql-client libpq-dev pip-dependency: psycopg2 - name: Set up test data run: | @@ -730,7 +734,7 @@ jobs: - name: Report coverage run: cd src/frontend && npx nyc report --report-dir ./coverage --temp-dir .nyc_output --reporter=lcov --exclude-after-remap false - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # pin@v5.5.2 + uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # pin@v6.0.0 with: token: ${{ secrets.CODECOV_TOKEN }} slug: inventree/InvenTree @@ -759,7 +763,7 @@ jobs: - name: Install dependencies run: cd src/frontend && yarn install - name: Build frontend - run: cd src/frontend && yarn run compile && yarn run build + run: cd src/frontend && yarn run compile && yarn run lib && yarn run build - name: Write version file - SHA run: cd src/backend/InvenTree/web/static/web/.vite && echo "$GITHUB_SHA" > sha.txt - name: Zip frontend @@ -785,13 +789,13 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - - uses: hynek/setup-cached-uv@757bedc3f972eb7227a1aa657651f15a8527c817 # pin@v2 + - uses: hynek/setup-cached-uv@4300ec2180bc77d705e626a34e381b81a4772c51 # pin@v2 - name: Run zizmor run: uvx zizmor --format sarif . > results.sarif env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # pin@v3 + uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # pin@v3 with: sarif_file: results.sarif category: zizmor diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e48d8987af..aa77d5282c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -55,7 +55,7 @@ jobs: - name: Build frontend run: cd src/frontend && npm run compile && npm run build - name: Create SBOM for frontend - uses: anchore/sbom-action@28d71544de8eaf1b958d335707167c5f783590ad # pin@v0 + uses: anchore/sbom-action@e22c389904149dbc22b58101806040fa8d37a610 # pin@v0 with: artifact-name: frontend-build.spdx path: src/frontend @@ -78,7 +78,7 @@ jobs: subject-path: "${{ github.workspace }}/src/backend/InvenTree/web/static/frontend-build.zip" - name: Upload frontend - uses: svenstaro/upload-release-action@b98a3b12e86552593f3e4e577ca8a62aa2f3f22b # pin@2.11.4 + uses: svenstaro/upload-release-action@29e53e917877a24fad85510ded594ab3c9ca12de # pin@2.11.5 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: src/backend/InvenTree/web/static/frontend-build.zip @@ -91,7 +91,7 @@ jobs: name: frontend-build path: src/backend/InvenTree/web/static/frontend-build.zip - name: Upload Attestation - uses: svenstaro/upload-release-action@b98a3b12e86552593f3e4e577ca8a62aa2f3f22b # pin@2.11.4 + uses: svenstaro/upload-release-action@29e53e917877a24fad85510ded594ab3c9ca12de # pin@2.11.5 with: repo_token: ${{ secrets.GITHUB_TOKEN }} asset_name: frontend-build.intoto.jsonl @@ -134,7 +134,7 @@ jobs: cd docs/site zip -r docs-html.zip * - name: Publish documentation - uses: svenstaro/upload-release-action@b98a3b12e86552593f3e4e577ca8a62aa2f3f22b # pin@2.11.4 + uses: svenstaro/upload-release-action@29e53e917877a24fad85510ded594ab3c9ca12de # pin@2.11.5 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: docs/site/docs-html.zip @@ -163,7 +163,7 @@ jobs: persist-credentials: false - name: Get frontend artifact - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # pin@v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # pin@v8.0.1 with: name: frontend-build - name: Setup @@ -244,7 +244,7 @@ jobs: channel: ${{ env.pkg_channel }} file: ${{ steps.package.outputs.package_path }} - name: Publish to artifact - uses: svenstaro/upload-release-action@b98a3b12e86552593f3e4e577ca8a62aa2f3f22b # pin@2.11.4 + uses: svenstaro/upload-release-action@29e53e917877a24fad85510ded594ab3c9ca12de # pin@2.11.5 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ${{ steps.package.outputs.package_path }} diff --git a/.github/workflows/scorecard.yaml b/.github/workflows/scorecard.yaml index 11926cacbc..4a0bc3ab6a 100644 --- a/.github/workflows/scorecard.yaml +++ b/.github/workflows/scorecard.yaml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 + uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1 with: sarif_file: results.sarif diff --git a/.github/workflows/translations.yaml b/.github/workflows/translations.yaml index 20249055bc..ac25e3c5bb 100644 --- a/.github/workflows/translations.yaml +++ b/.github/workflows/translations.yaml @@ -56,7 +56,7 @@ jobs: echo "Resetting to HEAD~" git reset HEAD~ || true - name: crowdin action - uses: crowdin/github-action@8818ff65bfc4322384f983ea37e3926948c11745 # pin@v2 + uses: crowdin/github-action@7ca9c452bfe9197d3bb7fa83a4d7e2b0c9ae835d # pin@v2 with: upload_sources: true upload_translations: false diff --git a/.pkgr.yml b/.pkgr.yml index 01326874d2..ac9dc06408 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -20,6 +20,7 @@ before: - contrib/packager.io/before.sh dependencies: - curl + - poppler-utils - "python3.11 | python3.12 | python3.13 | python3.14" - "python3.11-venv | python3.12-venv | python3.13-venv | python3.14-venv" - "python3.11-dev | python3.12-dev | python3.13-dev | python3.14-dev" diff --git a/.vscode/launch.json b/.vscode/launch.json index e32e7beeb8..17186b6d37 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -36,7 +36,9 @@ "program": "${workspaceFolder}/src/backend/InvenTree/manage.py", "args": [ "runserver", - "0.0.0.0:8000" + "0.0.0.0:8000", + // "--sync",// Synchronize worker tasks to foreground thread + // "--noreload", // disable auto-reload ], "django": true, "justMyCode": false diff --git a/CHANGELOG.md b/CHANGELOG.md index a7970539d2..2828010f71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,20 +10,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Breaking Changes - [#11303](https://github.com/inventree/InvenTree/pull/11303) removes the `default_supplier` field from the `Part` model. Instead, the `SupplierPart` model now has a `primary` field which is used to indicate which supplier is the default for a given part. Any external client applications which made use of the old `default_supplier` field will need to be updated. +- [#11500](https://github.com/inventree/InvenTree/pull/11500) fixes a spelling mistake in the database configuration values, which may affect some users running the PostgreSQL database backend. The `tcp_keepalives_internal` option has been renamed to `tcp_keepalives_interval` to reflect the correct PostgreSQL configuration option name. If you are using PostgreSQL, and have set a custom value for the `tcp_keepalives_internal` option, you will need to update this to `tcp_keepalives_interval` in your configuration (either via environment variable or config file). ### Added +- [#11702](https://github.com/inventree/InvenTree/pull/11702) adds "last updated" and "updated by" fields for label and report templates, allowing users to track when a template was last modified and by whom. +- [#11685](https://github.com/inventree/InvenTree/pull/11685) exposes the data importer wizard to the plugin interface, allowing plugins to trigger the data importer wizard and perform custom data imports from the UI. +- [#11692](https://github.com/inventree/InvenTree/pull/11692) adds line item numbering for external orders (purchase, sales and return orders). This allows users to specify a line number for each line item on the order, which can be used for reference purposes. The line number is optional, and can be left blank if not required. The line number is stored as a string, to allow for more flexible formatting (e.g. "1", "1.1", "A", etc). +- [#11641](https://github.com/inventree/InvenTree/pull/11641) adds support for custom parameters against the SalesOrderShipment model. +- [#11527](https://github.com/inventree/InvenTree/pull/11527) adds a new API endpoint for monitoring the status of a particular background task. This endpoint allows clients to check the status of a background task and receive updates when the task is complete. This is useful for long-running tasks that may take some time to complete, allowing clients to provide feedback to users about the progress of the task. - [#11405](https://github.com/inventree/InvenTree/pull/11405) adds default table filters, which hide inactive items by default. The default table filters are overridden by user filter selection, and only apply to the table view initially presented to the user. This means that users can still view inactive items if they choose to, but they will not be shown by default. - [#11222](https://github.com/inventree/InvenTree/pull/11222) adds support for data import using natural keys, allowing for easier association of related objects without needing to know their internal database IDs. - [#11383](https://github.com/inventree/InvenTree/pull/11383) adds "exists_for_model_id", "exists_for_related_model", and "exists_for_related_model_id" filters to the ParameterTemplate API endpoint. These filters allow users to check for the existence of parameters associated with specific models or related models, improving the flexibility and usability of the API. - [#10887](https://github.com/inventree/InvenTree/pull/10887) adds the ability to auto-allocate tracked items against specific build outputs. Currently, this will only allocate items where the serial number of the tracked item matches the serial number of the build output, but in future this may be extended to allow for more flexible allocation rules. - [#11372](https://github.com/inventree/InvenTree/pull/11372) adds backup metadata setter and restore metadata validator functions to ensure common footguns are harder to trigger when using the backup and restore functionality. - [#11374](https://github.com/inventree/InvenTree/pull/11374) adds `updated_at` field on purchase, sales and return orders. +- [#11074](https://github.com/inventree/InvenTree/pull/11074) adds "Keep form open" option on create form which leaves dialog with form opened after form submitting. ### Changed +- [#11648](https://github.com/inventree/InvenTree/pull/11648) improves the import/export process, allowing data records defined by plugins to be loaded when importing a database from a file. +- [#11630](https://github.com/inventree/InvenTree/pull/11630) enhances the `import_records` and `export_records` system commands, by adding a metadata entry to the exported data file to allow for compatibility checks during data import. + ### Removed +- [#11581](https://github.com/inventree/InvenTree/pull/11581) removes the ability to specify arbitrary filters when performing bulk operations via the API. This functionality represented a significant security risk, and was not required for any existing use cases. Bulk operations now only work with a provided list of primary keys. + ## 1.2.0 - 2026-02-12 ### Breaking Changes diff --git a/contrib/container/Dockerfile b/contrib/container/Dockerfile index b7ee19c4f6..2a8693f11d 100644 --- a/contrib/container/Dockerfile +++ b/contrib/container/Dockerfile @@ -9,8 +9,8 @@ # - Runs InvenTree web server under django development server # - Monitors source files for any changes, and live-reloads server -# Base image last bumped 2026-02-23 -FROM python:3.14-slim-trixie@sha256:486b8092bfb12997e10d4920897213a06563449c951c5506c2a2cfaf591c599f AS inventree_base +# Base image last bumped 2026-03-20 +FROM python:3.14-slim-trixie@sha256:fb83750094b46fd6b8adaa80f66e2302ecbe45d513f6cece637a841e1025b4ca AS inventree_base # Build arguments for this image ARG commit_tag="" diff --git a/contrib/container/requirements.txt b/contrib/container/requirements.txt index 698f701c22..2cdb3b187f 100644 --- a/contrib/container/requirements.txt +++ b/contrib/container/requirements.txt @@ -6,9 +6,9 @@ asgiref==3.11.1 \ # via # -c src/backend/requirements.txt # django -django==5.2.12 \ - --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ - --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb +django==5.2.13 \ + --hash=sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a \ + --hash=sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4 # via # -c src/backend/requirements.txt # -r contrib/container/requirements.in @@ -17,9 +17,9 @@ django-auth-ldap==5.3.0 \ --hash=sha256:743d8107b146240b46f7e97207dc06cb11facc0cd70dce490b7ca09dd5643d19 \ --hash=sha256:aa880415983149b072f876d976ef8ec755a438090e176817998263a6ed9e1038 # via -r contrib/container/requirements.in -gunicorn==25.1.0 \ - --hash=sha256:1426611d959fa77e7de89f8c0f32eed6aa03ee735f98c01efba3e281b1c47616 \ - --hash=sha256:d0b1236ccf27f72cfe14bce7caadf467186f19e865094ca84221424e839b8b8b +gunicorn==25.3.0 \ + --hash=sha256:cacea387dab08cd6776501621c295a904fe8e3b7aae9a1a3cbb26f4e7ed54660 \ + --hash=sha256:f74e1b2f9f76f6cd1ca01198968bd2dd65830edc24b6e8e4d78de8320e2fe889 # via # -c src/backend/requirements.txt # -r contrib/container/requirements.in @@ -44,15 +44,14 @@ mariadb==1.1.14 \ --hash=sha256:98d552a8bb599eceaa88f65002ad00bd88aeed160592c273a7e5c1d79ab733dd \ --hash=sha256:e6d702a53eccf20922e47f2f45cfb5c7a0c2c6c0a46e4ee2d8a80d0ff4a52f34 # via -r contrib/container/requirements.in -mysqlclient==2.2.7 \ - --hash=sha256:199dab53a224357dd0cb4d78ca0e54018f9cee9bf9ec68d72db50e0a23569076 \ - --hash=sha256:201a6faa301011dd07bca6b651fe5aaa546d7c9a5426835a06c3172e1056a3c5 \ - --hash=sha256:24ae22b59416d5fcce7e99c9d37548350b4565baac82f95e149cac6ce4163845 \ - --hash=sha256:2e3c11f7625029d7276ca506f8960a7fd3c5a0a0122c9e7404e6a8fe961b3d22 \ - --hash=sha256:4b4c0200890837fc64014cc938ef2273252ab544c1b12a6c1d674c23943f3f2e \ - --hash=sha256:92af368ed9c9144737af569c86d3b6c74a012a6f6b792eb868384787b52bb585 \ - --hash=sha256:977e35244fe6ef44124e9a1c2d1554728a7b76695598e4b92b37dc2130503069 \ - --hash=sha256:a22d99d26baf4af68ebef430e3131bb5a9b722b79a9fcfac6d9bbf8a88800687 +mysqlclient==2.2.8 \ + --hash=sha256:000c7ec3d11e7c411db832e4cfcd7f05db47464326381f5d5ae991b4bb572f93 \ + --hash=sha256:260cce0e81446c83bf0a389e0fae38d68547d9f8fc0833bc733014e10ce28a99 \ + --hash=sha256:60c9ed339dc09e3d5380cc2a9f42e86754fee25a661ced77a02df77990664c92 \ + --hash=sha256:86db31bba7b3480fec2751350e9790e24f016f89af33a87bab7e79f7196474e8 \ + --hash=sha256:8ed20c5615a915da451bb308c7d0306648a4fd9a2809ba95c992690006306199 \ + --hash=sha256:9bed7c8d3b629bdc09e17fb628d5b3b0a5fd1f12b09432b464b9126c727bedc0 \ + --hash=sha256:a81f5e12f8d05439709cb02fba97f9f76d1a6c528164f2260d8798fec969e300 # via -r contrib/container/requirements.in packaging==26.0 \ --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ @@ -62,74 +61,74 @@ packaging==26.0 \ # gunicorn # mariadb # wheel -psycopg[binary, pool]==3.3.2 \ - --hash=sha256:3e94bc5f4690247d734599af56e51bae8e0db8e4311ea413f801fef82b14a99b \ - --hash=sha256:707a67975ee214d200511177a6a80e56e654754c9afca06a7194ea6bbfde9ca7 +psycopg[binary, pool]==3.3.3 \ + --hash=sha256:5e9a47458b3c1583326513b2556a2a9473a1001a56c9efe9e587245b43148dd9 \ + --hash=sha256:f96525a72bcfade6584ab17e89de415ff360748c766f0106959144dcbb38c698 # via -r contrib/container/requirements.in -psycopg-binary==3.3.2 \ - --hash=sha256:03b7cd73fb8c45d272a34ae7249713e32492891492681e3cf11dff9531cf37e9 \ - --hash=sha256:04bb2de4ba69d6f8395b446ede795e8884c040ec71d01dd07ac2b2d18d4153d1 \ - --hash=sha256:0611f4822674f3269e507a307236efb62ae5a828fcfc923ac85fe22ca19fd7c8 \ - --hash=sha256:0768c5f32934bb52a5df098317eca9bdcf411de627c5dca2ee57662b64b54b41 \ - --hash=sha256:07a5f030e0902ec3e27d0506ceb01238c0aecbc73ecd7fa0ee55f86134600b5b \ - --hash=sha256:083c2e182be433f290dc2c516fd72b9b47054fcd305cce791e0a50d9e93e06f2 \ - --hash=sha256:09b3014013f05cd89828640d3a1db5f829cc24ad8fa81b6e42b2c04685a0c9d4 \ - --hash=sha256:0ae60e910531cfcc364a8f615a7941cac89efeb3f0fffe0c4824a6d11461eef7 \ - --hash=sha256:136c43f185244893a527540307167f5d3ef4e08786508afe45d6f146228f5aa9 \ - --hash=sha256:1586e220be05547c77afc326741dd41cc7fba38a81f9931f616ae98865439678 \ - --hash=sha256:1e09d0d93d35c134704a2cb2b15f81ffc8174fd602f3e08f7b1a3d8896156cf0 \ - --hash=sha256:1ea41c0229f3f5a3844ad0857a83a9f869aa7b840448fa0c200e6bcf85d33d19 \ - --hash=sha256:23d2594af848c1fd3d874a9364bef50730124e72df7bb145a20cb45e728c50ed \ - --hash=sha256:3789d452a9d17a841c7f4f97bbcba51a21f957ea35641a4c98507520e6b6a068 \ - --hash=sha256:3ff7489df5e06c12d1829544eaec64970fe27fe300f7cf04c8495fe682064688 \ - --hash=sha256:43b130e3b6edcb5ee856c7167ccb8561b473308c870ed83978ae478613764f1c \ - --hash=sha256:44e89938d36acc4495735af70a886d206a5bfdc80258f95b69b52f68b2968d9e \ - --hash=sha256:458696a5fa5dad5b6fb5d5862c22454434ce4fe1cf66ca6c0de5f904cbc1ae3e \ - --hash=sha256:50ff10ab8c0abdb5a5451b9315538865b50ba64c907742a1385fdf5f5772b73e \ - --hash=sha256:522b79c7db547767ca923e441c19b97a2157f2f494272a119c854bba4804e186 \ - --hash=sha256:59d0163c4617a2c577cb34afbed93d7a45b8c8364e54b2bd2020ff25d5f5f860 \ - --hash=sha256:5a327327f1188b3fbecac41bf1973a60b86b2eb237db10dc945bd3dc97ec39e4 \ - --hash=sha256:649c1d33bedda431e0c1df646985fbbeb9274afa964e1aef4be053c0f23a2924 \ - --hash=sha256:716a586f99bbe4f710dc58b40069fcb33c7627e95cc6fc936f73c9235e07f9cf \ - --hash=sha256:742ce48cde825b8e52fb1a658253d6d1ff66d152081cbc76aa45e2986534858d \ - --hash=sha256:74bc306c4b4df35b09bc8cecf806b271e1c5d708f7900145e4e54a2e5dedfed0 \ - --hash=sha256:7c1feba5a8c617922321aef945865334e468337b8fc5c73074f5e63143013b5a \ - --hash=sha256:7c43a773dd1a481dbb2fe64576aa303d80f328cce0eae5e3e4894947c41d1da7 \ - --hash=sha256:8309ee4569dced5e81df5aa2dcd48c7340c8dee603a66430f042dfbd2878edca \ - --hash=sha256:8db9034cde3bcdafc66980f0130813f5c5d19e74b3f2a19fb3cfbc25ad113121 \ - --hash=sha256:8ea05b499278790a8fa0ff9854ab0de2542aca02d661ddff94e830df971ff640 \ - --hash=sha256:90ed9da805e52985b0202aed4f352842c907c6b4fc6c7c109c6e646c32e2f43b \ - --hash=sha256:94503b79f7da0b65c80d0dbb2f81dd78b300319ec2435d5e6dcf9622160bc2fa \ - --hash=sha256:9742580ecc8e1ac45164e98d32ca6df90da509c2d3ff26be245d94c430f92db4 \ - --hash=sha256:9ca24062cd9b2270e4d77576042e9cc2b1d543f09da5aba1f1a3d016cea28390 \ - --hash=sha256:a9387ab615f929e71ef0f4a8a51e986fa06236ccfa9f3ec98a88f60fbf230634 \ - --hash=sha256:ac230e3643d1c436a2dfb59ca84357dfc6862c9f372fc5dbd96bafecae581f9f \ - --hash=sha256:c3a9ccdfee4ae59cf9bf1822777e763bc097ed208f4901e21537fca1070e1391 \ - --hash=sha256:c5774272f754605059521ff037a86e680342e3847498b0aa86b0f3560c70963c \ - --hash=sha256:c6464150e25b68ae3cb04c4e57496ea11ebfaae4d98126aea2f4702dd43e3c12 \ - --hash=sha256:c749770da0947bc972e512f35366dd4950c0e34afad89e60b9787a37e97cb443 \ - --hash=sha256:cabb2a554d9a0a6bf84037d86ca91782f087dfff2a61298d0b00c19c0bc43f6d \ - --hash=sha256:d391b70c9cc23f6e1142729772a011f364199d2c5ddc0d596f5f43316fbf982d \ - --hash=sha256:d45acedcaa58619355f18e0f42af542fcad3fd84ace4b8355d3a5dea23318578 \ - --hash=sha256:d79b0093f0fbf7a962d6a46ae292dc056c65d16a8ee9361f3cfbafd4c197ab14 \ - --hash=sha256:d88f32ff8c47cb7f4e7e7a9d1747dcee6f3baa19ed9afa9e5694fd2fb32b61ed \ - --hash=sha256:d8c899a540f6c7585cee53cddc929dd4d2db90fd828e37f5d4017b63acbc1a5d \ - --hash=sha256:de9173f8cc0efd88ac2a89b3b6c287a9a0011cdc2f53b2a12c28d6fd55f9f81c \ - --hash=sha256:df65174c7cf6b05ea273ce955927d3270b3a6e27b0b12762b009ce6082b8d3fc \ - --hash=sha256:e22bf6b54df994aff37ab52695d635f1ef73155e781eee1f5fa75bc08b58c8da \ - --hash=sha256:e750afe74e6c17b2c7046d2c3e3173b5a3f6080084671c8aa327215323df155b \ - --hash=sha256:ea4fe6b4ead3bbbe27244ea224fcd1f53cb119afc38b71a2f3ce570149a03e30 \ - --hash=sha256:f26f113013c4dcfbfe9ced57b5bad2035dda1a7349f64bf726021968f9bccad3 \ - --hash=sha256:f3f601f32244a677c7b029ec39412db2772ad04a28bc2cbb4b1f0931ed0ffad7 \ - --hash=sha256:fc5a189e89cbfff174588665bb18d28d2d0428366cc9dae5864afcaa2e57380b +psycopg-binary==3.3.3 \ + --hash=sha256:05f32239aec25c5fb15f7948cffdc2dc0dac098e48b80a140e4ba32b572a2e7d \ + --hash=sha256:07c7211f9327d522c9c47560cae00a4ecf6687f4e02d779d035dd3177b41cb12 \ + --hash=sha256:0dde92cfde09293fb63b3f547919ba7d73bd2654573c03502b3263dd0218e44e \ + --hash=sha256:111c59897a452196116db12e7f608da472fbff000693a21040e35fc978b23430 \ + --hash=sha256:162e5675efb4704192411eaf8e00d07f7960b679cd3306e7efb120bb8d9456cc \ + --hash=sha256:165f22ab5a9513a3d7425ffb7fcc7955ed8ccaeef6d37e369d6cc1dff1582383 \ + --hash=sha256:17bb6600e2455993946385249a3c3d0af52cd70c1c1cdbf712e9d696d0b0bf1b \ + --hash=sha256:19f93235ece6dbfc4036b5e4f6d8b13f0b8f2b3eeb8b0bd2936d406991bcdd40 \ + --hash=sha256:1bef235a50a80f6aba05147002bc354559657cb6386dbd04d8e1c97d1d7cbe84 \ + --hash=sha256:258d1ea53464d29768bf25930f43291949f4c7becc706f6e220c515a63a24edd \ + --hash=sha256:263a24f39f26e19ed7fc982d7859a36f17841b05bebad3eb47bb9cd2dd785351 \ + --hash=sha256:329ff393441e75f10b673ae99ab45276887993d49e65f141da20d915c05aafd8 \ + --hash=sha256:42961609ac07c232a427da7c87a468d3c82fee6762c220f38e37cfdacb2b178d \ + --hash=sha256:47f06fcbe8542b4d96d7392c476a74ada521c5aebdb41c3c0155f6595fc14c8d \ + --hash=sha256:48e500cf1c0984dacf1f28ea482c3cdbb4c2288d51c336c04bc64198ab21fc51 \ + --hash=sha256:497852c5eaf1f0c2d88ab74a64a8097c099deac0c71de1cbcf18659a8a04a4b2 \ + --hash=sha256:4d4606c84d04b80f9138d72f1e28c6c02dc5ae0c7b8f3f8aaf89c681ce1cd1b1 \ + --hash=sha256:5152d50798c2fa5bd9b68ec68eb68a1b71b95126c1d70adaa1a08cd5eefdc23d \ + --hash=sha256:533efe6dc3a7cba5e2a84e38970786bb966306863e45f3db152007e9f48638a6 \ + --hash=sha256:56c767007ca959ca32f796b42379fc7e1ae2ed085d29f20b05b3fc394f3715cc \ + --hash=sha256:5958dbf28b77ce2033482f6cb9ef04d43f5d8f4b7636e6963d5626f000efb23e \ + --hash=sha256:59aa31fe11a0e1d1bcc2ce37ed35fe2ac84cd65bb9036d049b1a1c39064d0f14 \ + --hash=sha256:642050398583d61c9856210568eb09a8e4f2fe8224bf3be21b67a370e677eead \ + --hash=sha256:6698dbab5bcef8fdb570fc9d35fd9ac52041771bfcfe6fd0fc5f5c4e36f1e99d \ + --hash=sha256:73eaaf4bb04709f545606c1db2f65f4000e8a04cdbf3e00d165a23004692093e \ + --hash=sha256:74eae563166ebf74e8d950ff359be037b85723d99ca83f57d9b244a871d6c13b \ + --hash=sha256:78c9ce98caaf82ac8484d269791c1b403d7598633e0e4e2fa1097baae244e2f1 \ + --hash=sha256:7c84f9d214f2d1de2fafebc17fa68ac3f6561a59e291553dfc45ad299f4898c1 \ + --hash=sha256:883d68d48ca9ff3cb3d10c5fdebea02c79b48eecacdddbf7cce6e7cdbdc216b8 \ + --hash=sha256:8e7e9eca9b363dbedeceeadd8be97149d2499081f3c52d141d7cd1f395a91f83 \ + --hash=sha256:90eecd93073922f085967f3ed3a98ba8c325cbbc8c1a204e300282abd2369e13 \ + --hash=sha256:97c839717bf8c8df3f6d983a20949c4fb22e2a34ee172e3e427ede363feda27b \ + --hash=sha256:9d6a1e56dd267848edb824dbeb08cf5bac649e02ee0b03ba883ba3f4f0bd54f2 \ + --hash=sha256:9f7d0cf072c6fbac3795b08c98ef9ea013f11db609659dcfc6b1f6cc31f9e181 \ + --hash=sha256:a39f34c9b18e8f6794cca17bfbcd64572ca2482318db644268049f8c738f35a6 \ + --hash=sha256:a4aab31bd6d1057f287c96c0effca3a25584eb9cc702f282ecb96ded7814e830 \ + --hash=sha256:a6af77b6626ce92b5817bf294b4d45ec1a6161dba80fc2d82cdffdd6814fd023 \ + --hash=sha256:a89bb9ee11177b2995d87186b1d9fa892d8ea725e85eab28c6525e4cc14ee048 \ + --hash=sha256:ae07a3114313dd91fce686cab2f4c44af094398519af0e0f854bc707e1aeedf1 \ + --hash=sha256:b27d3a23c79fa59557d2cc63a7e8bb4c7e022c018558eda36f9d7c4e6b99a6e0 \ + --hash=sha256:b3385b58b2fe408a13d084c14b8dcf468cd36cbbe774408250facc128f9fa75c \ + --hash=sha256:b62cf8784eb6d35beaee1056d54caf94ec6ecf2b7552395e305518ab61eb8fd2 \ + --hash=sha256:cab7bc3d288d37a80aa8c0820033250c95e40b1c2b5c57cf59827b19c2a8b69d \ + --hash=sha256:cb85b1d5702877c16f28d7b92ba030c1f49ebcc9b87d03d8c10bf45a2f1c7508 \ + --hash=sha256:d257c58d7b36a621dcce1d01476ad8b60f12d80eb1406aee4cf796f88b2ae482 \ + --hash=sha256:d593612758d0041cb13cb0003f7f8d3fabb7ad9319e651e78afae49b1cf5860e \ + --hash=sha256:da2f331a01af232259a21573a01338530c6016dcfad74626c01330535bcd8628 \ + --hash=sha256:dac7ee2f88b4d7bb12837989ca354c38d400eeb21bce3b73dac02622f0a3c8d6 \ + --hash=sha256:e77957d2ba17cada11be09a5066d93026cdb61ada7c8893101d7fe1c6e1f3925 \ + --hash=sha256:e7800e6c6b5dc4b0ca7cc7370f770f53ac83886b76afda0848065a674231e856 \ + --hash=sha256:e7b607f0e14f2a4cf7e78a05ebd13df6144acfba87cb90842e70d3f125d9f53f \ + --hash=sha256:eb072949b8ebf4082ae24289a2b0fd724da9adc8f22743409d6fd718ddb379df \ + --hash=sha256:eb36a08859b9432d94ea6b26ec41a2f98f83f14868c91321d0c1e11f672eeae7 \ + --hash=sha256:f24e8e17035200a465c178e9ea945527ad0738118694184c450f1192a452ff25 \ + --hash=sha256:fab6b5e37715885c69f5d091f6ff229be71e235f272ebaa35158d5a46fd548a0 # via psycopg psycopg-pool==3.3.0 \ --hash=sha256:2e44329155c410b5e8666372db44276a8b1ebd8c90f1c3026ebba40d4bc81063 \ --hash=sha256:fa115eb2860bd88fce1717d75611f41490dec6135efb619611142b24da3f6db5 # via psycopg -pyasn1==0.6.2 \ - --hash=sha256:1eb26d860996a18e9b6ed05e7aae0e9fc21619fcee6af91cca9bad4fbea224bf \ - --hash=sha256:9b59a2b25ba7e4f8197db7686c09fb33e658b98339fadb826e9512629017833b +pyasn1==0.6.3 \ + --hash=sha256:697a8ecd6d98891189184ca1fa05d1bb00e2f84b5977c481452050549c8a72cf \ + --hash=sha256:a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde # via # pyasn1-modules # python-ldap @@ -219,9 +218,9 @@ pyyaml==6.0.3 \ # via # -c src/backend/requirements.txt # -r contrib/container/requirements.in -setuptools==82.0.0 \ - --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ - --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 +setuptools==82.0.1 \ + --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \ + --hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb # via # -c src/backend/requirements.txt # -r contrib/container/requirements.in @@ -237,26 +236,26 @@ typing-extensions==4.15.0 \ # via # -c src/backend/requirements.txt # psycopg-pool -uv==0.9.22 \ - --hash=sha256:012bdc5285a9cdb091ac514b7eb8a707e3b649af5355fe4afb4920bfe1958c00 \ - --hash=sha256:0cdc653fb601aa7f273242823fa93024f5fd319c66cdf22f36d784858493564c \ - --hash=sha256:0d8f007616cac5962620252b56a1d8224e9b2de566e78558efe04cc18526d507 \ - --hash=sha256:1f45e1e0f26dd47fa01eb421c54cfd39de10fd52ac0a9d7ae45b92fce7d92b0b \ - --hash=sha256:1f979c9d313b4616d9865859ef520bea5df0d4f15c57214589f5676fafa440c1 \ - --hash=sha256:2a4155cf7d0231d0adae94257ee10d70c57c2f592207536ddd55d924590a8c15 \ - --hash=sha256:3422b093b8e6e8de31261133b420c34dbef81f3fd1d82f787ac771b00b54adf8 \ - --hash=sha256:369b55341c6236f42d8fc335876308e5c57c921850975b3019cc9f7ebbe31567 \ - --hash=sha256:3b2bcce464186f8fafa3bf2aa5d82db4e3229366345399cc3f5bcafd616b8fe0 \ - --hash=sha256:41c73a4938818ede30e601cd0be87953e5c6a83dc4762e04e626f2eb9b240ebe \ - --hash=sha256:59c4f6b3659a68c26c50865432a7134386f607432160aad51e2247f862902697 \ - --hash=sha256:77ec4c101d41d7738226466191a7d62f9fa4de06ea580e0801da2f5cd5fa08aa \ - --hash=sha256:8f73043ade8ff6335e19fe1f4e7425d5e28aec9cafd72d13d5b40bb1cbb85690 \ - --hash=sha256:9c238525272506845fe07c0b9088c5e33fcd738e1f49ef49dc3c8112096d2e3a \ - --hash=sha256:b1985559b38663642658069e8d09fa6c30ed1c67654b7e5765240d9e4e9cdd57 \ - --hash=sha256:b78f2605d65c4925631d891dec99b677b05f50c774dedc6ef8968039a5bcfdb0 \ - --hash=sha256:b807bafe6b65fc1fe9c65ffd0d4228db894872de96e7200c44943f24beb68931 \ - --hash=sha256:d9d4be990bb92a68781f7c98d2321b528667b61d565c02ba978488c0210aa768 \ - --hash=sha256:e4b61a9c8b8dcbf64e642d2052342d36a46886b8bc3ccc407282962b970101af +uv==0.10.12 \ + --hash=sha256:006812a086fce03d230fc987299f7295c7a73d17a1f1c17de1d1f327826f8481 \ + --hash=sha256:101481a1f48db6becf219914a591a588c0b3bfd05bef90768a5d04972bd6455e \ + --hash=sha256:2ace05115bd9ee1b30d341728257fe051817c4c0a652c085c90d4bd4fb0bc8f2 \ + --hash=sha256:2bb5893d79179727253e4a283871a693d7773c662a534fb897aa65496aa35765 \ + --hash=sha256:2c21e1b36c384f75dd3fd4a818b04871158ce115efff0bb4fdcd18ba2df7bd48 \ + --hash=sha256:2c5dfc7560453186e911c8c2e4ce95cd1c91e1c5926c3b34c5a825a307217be9 \ + --hash=sha256:384b7f36a1ae50efe5f50fe299f276a83bf7acc8b7147517f34e27103270f016 \ + --hash=sha256:551f799d53e397843b6cde7e3c61de716fb487da512a21a954b7d0cbc06967e0 \ + --hash=sha256:6727e3a0208059cd4d621684e580d5e254322dacbd806e0d218360abd0d48a68 \ + --hash=sha256:7099bdefffbe2df81accad52579657b8f9f870170caa779049c9fd82d645c9b3 \ + --hash=sha256:76ebe11572409dfbe20ec25a823f9bc8781400ece5356aa33ec44903af7ec316 \ + --hash=sha256:8dc352c93a47a4760cf824c31c55ce26511af780481e8f67c796d2779acaa928 \ + --hash=sha256:a5afe619e8a861fe4d49df8e10d2c6963de0dac6b79350c4832bf3366c8496cf \ + --hash=sha256:b9ca1d264059cb016c853ebbc4f21c72d983e0f347c927ca29e283aec2f596cf \ + --hash=sha256:bd84379292e3c1a1bf0a05847c7c72b66bb581dccf8da1ef94cc82bf517efa7c \ + --hash=sha256:be85acae8f31c68311505cd96202bad43165cbd7be110c59222f918677e93248 \ + --hash=sha256:cca36540d637c80d11d8a44a998a068355f0c78b75ec6b0f152ecbf89dfdd67b \ + --hash=sha256:e0f0ef58f0ba6fbfaf5f91b67aad6852252c49b8f78015a2a5800cf74c7538d5 \ + --hash=sha256:fa722691c7ae5c023778ad0b040ab8619367bcfe44fd0d9e05a58751af86cdf8 # via -r contrib/container/requirements.in wheel==0.46.3 \ --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ diff --git a/contrib/dev_reqs/requirements.in b/contrib/dev_reqs/requirements.in index d91d3c7581..06b0753513 100644 --- a/contrib/dev_reqs/requirements.in +++ b/contrib/dev_reqs/requirements.in @@ -1,4 +1,4 @@ # Packages needed for CI/packages -requests==2.32.5 +requests==2.33.0 pyyaml==6.0.3 jc==1.25.6 diff --git a/contrib/dev_reqs/requirements.txt b/contrib/dev_reqs/requirements.txt index 35ea2c4c2a..9e26439b3e 100644 --- a/contrib/dev_reqs/requirements.txt +++ b/contrib/dev_reqs/requirements.txt @@ -6,120 +6,136 @@ certifi==2026.2.25 \ # via # -c src/backend/requirements.txt # requests -charset-normalizer==3.4.4 \ - --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ - --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ - --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ - --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ - --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \ - --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ - --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \ - --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \ - --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ - --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ - --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ - --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \ - --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ - --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \ - --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ - --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \ - --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ - --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ - --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ - --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ - --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \ - --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ - --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \ - --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ - --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \ - --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ - --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ - --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ - --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \ - --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ - --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ - --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ - --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \ - --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ - --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ - --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ - --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ - --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ - --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \ - --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ - --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ - --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ - --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ - --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ - --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ - --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \ - --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ - --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ - --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ - --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ - --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \ - --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \ - --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ - --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ - --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \ - --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ - --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ - --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ - --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ - --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ - --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ - --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ - --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ - --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ - --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ - --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ - --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ - --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ - --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ - --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ - --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \ - --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \ - --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ - --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ - --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ - --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ - --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \ - --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \ - --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ - --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ - --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \ - --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ - --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ - --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \ - --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ - --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ - --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \ - --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \ - --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \ - --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ - --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ - --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ - --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ - --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ - --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ - --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ - --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ - --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ - --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \ - --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \ - --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ - --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ - --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ - --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \ - --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ - --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ - --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ - --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ - --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \ - --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ - --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \ - --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ - --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 +charset-normalizer==3.4.6 \ + --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ + --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ + --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ + --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ + --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ + --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ + --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ + --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ + --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ + --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ + --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ + --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ + --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ + --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ + --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ + --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ + --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ + --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ + --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ + --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ + --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ + --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ + --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ + --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ + --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ + --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ + --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ + --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ + --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ + --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ + --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ + --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ + --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ + --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ + --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ + --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ + --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ + --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ + --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ + --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ + --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ + --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ + --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ + --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ + --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ + --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ + --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ + --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ + --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ + --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ + --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ + --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ + --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ + --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ + --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ + --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ + --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ + --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ + --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ + --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ + --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ + --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ + --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ + --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ + --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ + --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ + --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ + --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ + --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ + --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ + --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ + --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ + --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ + --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ + --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ + --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ + --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ + --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ + --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ + --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ + --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ + --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ + --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ + --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ + --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ + --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ + --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ + --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ + --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ + --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ + --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ + --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ + --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ + --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ + --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ + --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ + --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ + --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ + --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ + --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ + --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ + --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ + --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ + --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ + --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ + --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ + --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ + --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ + --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ + --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ + --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ + --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ + --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ + --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ + --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ + --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ + --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ + --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ + --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ + --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ + --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ + --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ + --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ + --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ + --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ + --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ + --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ + --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ + --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 # via # -c src/backend/requirements.txt # requests @@ -133,9 +149,9 @@ jc==1.25.6 \ --hash=sha256:27f58befc7ae0a4c63322926c5f1ec892e3eac4a065eff3b07cfe420a6924a07 \ --hash=sha256:7367b59e6e0da8babeede1e5b0da083f3c5aa6b6e585b4aed28dd7c4b2d76162 # via -r contrib/dev_reqs/requirements.in -pygments==2.19.2 \ - --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \ - --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 # via jc pyyaml==6.0.3 \ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ @@ -214,9 +230,9 @@ pyyaml==6.0.3 \ # via # -c src/backend/requirements.txt # -r contrib/dev_reqs/requirements.in -requests==2.32.5 \ - --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ - --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 # via # -c src/backend/requirements.txt # -r contrib/dev_reqs/requirements.in @@ -230,7 +246,7 @@ urllib3==2.6.3 \ # via # -c src/backend/requirements.txt # requests -xmltodict==1.0.2 \ - --hash=sha256:54306780b7c2175a3967cad1db92f218207e5bc1aba697d887807c0fb68b7649 \ - --hash=sha256:62d0fddb0dcbc9f642745d8bbf4d81fd17d6dfaec5a15b5c1876300aad92af0d +xmltodict==1.0.4 \ + --hash=sha256:6d94c9f834dd9e44514162799d344d815a3a4faec913717a9ecbfa5be1bb8e61 \ + --hash=sha256:a4a00d300b0e1c59fc2bfccb53d7b2e88c32f200df138a0dd2229f842497026a # via jc diff --git a/docs/docs/app/settings.md b/docs/docs/app/settings.md index d415dce933..5c6e7815c7 100644 --- a/docs/docs/app/settings.md +++ b/docs/docs/app/settings.md @@ -77,7 +77,7 @@ The *Part Settings* view allows you to configure various options governing what | Option | Description | | --- | --- | -| Parameters | Enable display of part parameters in the part detail view | +| Parameters | Enable display of parameters in the part detail view | | BOM | Enable bill of materials display in the part detail view | | Stock History | Enable display of stock history in the stock detail view | | Test Results | Enable display of test results in the stock detail view | diff --git a/docs/docs/assets/images/concepts/ui_form_add_part.png b/docs/docs/assets/images/concepts/ui_form_add_part.png index af8daf9836..3f2cc70e22 100644 Binary files a/docs/docs/assets/images/concepts/ui_form_add_part.png and b/docs/docs/assets/images/concepts/ui_form_add_part.png differ diff --git a/docs/docs/concepts/parameters.md b/docs/docs/concepts/parameters.md index ca44989dab..47e42cec97 100644 --- a/docs/docs/concepts/parameters.md +++ b/docs/docs/concepts/parameters.md @@ -15,7 +15,7 @@ Parameters can be associated with various InvenTree models. Any model which supports parameters will have a "Parameters" tab on its detail page. This tab displays all parameters associated with that object: -{{ image("concepts/parameter-tab.png", "Part Parameters Example") }} +{{ image("concepts/parameter-tab.png", "Parameters Example") }} ## Parameter Templates @@ -40,9 +40,9 @@ Parameter templates are created and edited via the [admin interface](../settings To create a template: - Navigate to the "Settings" page -- Click on the "Part Parameters" tab +- Click on the "Parameters" tab - Click on the "New Parameter" button -- Fill out the `Create Part Parameter Template` form: `Name` (required) and `Units` (optional) fields +- Fill out the `Create Parameter Template` form: `Name` (required) and `Units` (optional) fields - Click on the "Submit" button. An existing template can be edited by clicking on the "Edit" button associated with that template: @@ -53,9 +53,9 @@ An existing template can be edited by clicking on the "Edit" button associated w After [creating a template](#create-template) or using the existing templates, you can add parameters to any part. -To add a parameter, navigate to a specific part detail page, click on the "Parameters" tab then click on the "New Parameters" button, the `Create Part Parameter` form will be displayed: +To add a parameter, navigate to a specific part detail page, click on the "Parameters" tab then click on the "New Parameters" button, the `Create Parameter` form will be displayed: -{{ image("part/create_part_parameter.png", "Create Part Parameter Form") }} +{{ image("part/create_part_parameter.png", "Create Parameter Form") }} Select the parameter `Template` you would like to use for this parameter, fill-out the `Data` field (value of this specific parameter) and click the "Submit" button. @@ -132,7 +132,7 @@ The in-built conversion functionality means that parameter values can be input i ### Incompatible Units -If a part parameter is created with a value which is incompatible with the units specified for the template, it will be rejected: +If a parameter is created with a value which is incompatible with the units specified for the template, it will be rejected: {{ image("part/part_invalid_units.png", "Invalid Parameter Units") }} @@ -151,4 +151,4 @@ Selection Lists can be used to add a large number of predefined values to a para It is possible that plugins lock selection lists to ensure a known state. -Administration of lists can be done through the Part Parameter section in the [Admin Center](../settings/admin.md#admin-center) or via the API. +Administration of lists can be done through the `Parameter` section in the [Admin Center](../settings/admin.md#admin-center) or via the API. diff --git a/docs/docs/concepts/threat_model.md b/docs/docs/concepts/threat_model.md index 5a0274b259..80dc9d566a 100644 --- a/docs/docs/concepts/threat_model.md +++ b/docs/docs/concepts/threat_model.md @@ -16,7 +16,7 @@ Deploying InvenTree to production requires to knowledge of the security assumpti 2. All users are trusted - therefore user uploaded files can be assumed to be safe. There are basic checks in place to ensure that the files are not using common attack vectors but those are not exhaustive. -3. Superuser permissions are only given to trusted users and not used for daily operations. A superuser account can manipulate or extract all files on the server that the InvenTree server process have access to. +3. Superuser or staff permissions are only given to trusted users and not used for daily operations. A superuser account can manipulate or extract all files on the server that the InvenTree server process have access to. See [dangerous user flags](../settings/permissions.md#dangerous-user-flags) for more details on user permissions and flags. 4. All templates and plugins are trusted. diff --git a/docs/docs/concepts/units.md b/docs/docs/concepts/units.md index ce71012455..9e1c1a50d7 100644 --- a/docs/docs/concepts/units.md +++ b/docs/docs/concepts/units.md @@ -8,7 +8,7 @@ Support for real-world "physical" units of measure is implemented using the [pin - Ensures consistent use of real units for your inventory management - Convert between compatible units of measure from suppliers -- Enforce use of compatible units when creating part parameters +- Enforce use of compatible units when creating parameters - Enable custom units as required ### Unit Conversion @@ -61,7 +61,7 @@ The [supplier part](../part/index.md/#supplier-parts) model uses real-world unit ### Parameter -The [parameter template](../concepts/parameters.md#parameter-templates) model can specify units of measure, and part parameters can be specified against these templates with compatible units +The [parameter template](../concepts/parameters.md#parameter-templates) model can specify units of measure, and parameters can be specified against these templates with compatible units ## Custom Units diff --git a/docs/docs/concepts/user_interface.md b/docs/docs/concepts/user_interface.md index 665b9fcf02..32373e9e6c 100644 --- a/docs/docs/concepts/user_interface.md +++ b/docs/docs/concepts/user_interface.md @@ -224,6 +224,8 @@ Example: Creating a new part via the "Add Part" form: {{ image("concepts/ui_form_add_part.png", "Add Part Button") }} +On several forms is displayed option "Keep form open" in bottom part of the form on left side of Submit button (option is visible on the screenshot above). When this switch is turned on, form window is not closed after submit and filled form data is not reset. This is useful for creating more entries at one time with similar properties (e.g. only different number in name). + ### Data Editing Example: Editing an existing purchase order via the "Edit Purchase Order" form: @@ -280,11 +282,12 @@ Alternatively, the spotlight search can be opened using the keyboard shortcut `C Users may opt to disable the spotlight search functionality if they do not find it useful or prefer not to use it. To disable the spotlight search, navigate to your [user settings](../settings/user.md) and locate the option to disable the spotlight feature. Once disabled, the spotlight search will no longer be accessible from the main menu or via keyboard shortcuts. -## Barcode Scanning +## Copy Button -## Notifications +Many fields within the InvenTree user interface include a "copy" button, which allows users to quickly copy the value of that field to their clipboard. This is particularly useful for fields that contain important identifiers, such as part numbers, stock item codes, or other relevant data that may need to be easily copied and pasted elsewhere. -## Customization +!!! important "Secure Context" + The "copy" button functionality relies on the browser's clipboard API, which may not be available in all contexts (e.g. if the user is accessing the InvenTree interface via a non-https connection, or through an embedded iframe or a non-standard browser). In such cases, the "copy" button may not function as intended. ## User Permissions diff --git a/docs/docs/develop/devcontainer.md b/docs/docs/develop/devcontainer.md index a7d2f8e1f6..a1d9721943 100644 --- a/docs/docs/develop/devcontainer.md +++ b/docs/docs/develop/devcontainer.md @@ -60,7 +60,12 @@ If you only need a superuser, run the `superuser` task. It should prompt you for #### Run background workers -If you need to process your queue with background workers, run the `worker` task. This is a foreground task which will execute in the terminal. +If you need to process your queue with background workers, open a new terminal and run the `worker` task with `invoke worker`. This is a foreground task which will execute in the terminal. + +If you are developing functions that will be executed by background workers there are a two debugging options. + +- If the workers are started with the `worker` task you can add `print` or `logger` statements to the code and monitor the output in the terminal. +- All tasks can be forced to run in the foreground worker by uncommenting the `--sync` and `--noreload` arguments under the `InvenTree Server - 3rd party` entry in `.vscode/launch.json`. With this setting you should not start a separate background worker, instead you start the `InvenTree Server - 3rd party` from the `Run and Debug` side panel. All task will now run in one single process and you can set breakpoints, inspect variables and single step also tasks that normally are offloaded to background workers. It should be noted that with this setting the GUI will be unresponsive while tasks are executed. ### Running InvenTree diff --git a/docs/docs/manufacturing/bom.md b/docs/docs/manufacturing/bom.md index 72f0aef389..4114b5b9ea 100644 --- a/docs/docs/manufacturing/bom.md +++ b/docs/docs/manufacturing/bom.md @@ -37,6 +37,12 @@ In the example below, see that the *Wood Screw* line item is marked as consumabl Further, in the [Build Order](./build.md) stock allocation table, we see that this line item cannot be allocated, as it is *consumable*. +### Optional BOM Line Items + +If a BOM line item is marked as *optional*, this means that the part and quantity information is tracked in the BOM, but this line item is not required to be allocated to a [Build Order](./build.md). This may be useful for certain items which are not strictly required for the build process to be completed. + +When completing a Build Order, the user can choose whether to include optional items in the build process or not. If optional items are included, they will be allocated to the Build Order as normal. If optional items are excluded, they will not be allocated to the Build Order, and the build process can be completed without them. + ### Substitute BOM Line Items Where alternative parts can be used when building an assembly, these parts are assigned as *Substitute* parts in the Bill of Materials. A particular line item may have multiple substitute parts assigned to it. When allocating stock to a [Build Order](./build.md), stock items associated with any of the substitute parts may be allocated against the particular line item. diff --git a/docs/docs/part/create.md b/docs/docs/part/create.md index d9b984e0e6..9aaa06e55e 100644 --- a/docs/docs/part/create.md +++ b/docs/docs/part/create.md @@ -20,7 +20,7 @@ New parts can be created manually by selecting the *Create Part* option from the {{ image("part/part_create_form.png", "New part form") }} -Fill out the required part parameters and then press *Submit* to create the new part. If there are any form errors, you must fix these before the form can be successfully submitted. +Fill out the required attributes and then press *Submit* to create the new part. If there are any form errors, you must fix these before the form can be successfully submitted. Once the form is completed, the browser window is redirected to the new part detail page. diff --git a/docs/docs/part/index.md b/docs/docs/part/index.md index e4848ece1f..076da58b25 100644 --- a/docs/docs/part/index.md +++ b/docs/docs/part/index.md @@ -81,7 +81,7 @@ Parts can be locked to prevent them from being modified. This is useful for part - Locked parts cannot be deleted - BOM items cannot be created, edited, or deleted when they are part of a locked assembly -- Part parameters linked to a locked part cannot be created, edited or deleted +- Parameters linked to a locked part cannot be created, edited or deleted ## Active Parts diff --git a/docs/docs/part/revision.md b/docs/docs/part/revision.md index fe7d94304d..2e86019351 100644 --- a/docs/docs/part/revision.md +++ b/docs/docs/part/revision.md @@ -27,24 +27,22 @@ When creating a new revision of a part, there are some restrictions which must b * **Circular References**: A part cannot be a revision of itself. This would create a circular reference which is not allowed. * **Unique Revisions**: A part cannot have two revisions with the same revision number. Each revision (of a given part) must have a unique revision code. -* **Revisions of Revisions**: A single part can have multiple revisions, but a revision cannot have its own revision. This restriction is in place to prevent overly complex part relationships. * **Template Revisions**: A part which is a [template part](./template.md) cannot have revisions. This is because the template part is used to create variants, and allowing revisions of templates would create disallowed relationship states in the database. However, variant parts are allowed to have revisions. * **Template References**: A part which is a revision of a variant part must point to the same template as the original part. This is to ensure that the revision is correctly linked to the original part. ## Revision Settings -The following options are available to control the behavior of part revisions. +The following [global settings](../settings/global.md) are available to control the behavior of part revisions: -Note that these options can be changed in the InvenTree settings: +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("PART_ENABLE_REVISION") }} +{{ globalsetting("PART_REVISION_ASSEMBLY_ONLY") }} -{{ image("part/part_revision_settings.png", "Part revision settings") }} - -* **Enable Revisions**: If this setting is enabled, parts can have revisions. If this setting is disabled, parts cannot have revisions. -* **Assembly Revisions Only**: If this setting is enabled, only assembly parts can have revisions. This is useful if you only want to track revisions of assemblies, and not individual parts. ## Create a Revision -To create a new revision for a given part, navigate to the part detail page, and click on the "Revisions" tab. +To create a new revision for a given part, navigate to the part detail page, and click on the part actions menu (three vertical dots on the top right of the page). Select the "Duplicate Part" action, to create a new copy of the selected part. This will open the "Duplicate Part" form: @@ -67,4 +65,5 @@ When multiple revisions exist for a particular part, you can navigate between re {{ image("part/part_revision_select.png", "Select part revision") }} -Note that this revision selector is only visible when multiple revisions exist for the part. +!!! info "Revision Selector Visibility" + Note that this revision selector is only visible when multiple revisions exist for the part. diff --git a/docs/docs/plugins/install.md b/docs/docs/plugins/install.md index 3d18d58850..6f2f9f5fd6 100644 --- a/docs/docs/plugins/install.md +++ b/docs/docs/plugins/install.md @@ -74,6 +74,9 @@ Enter the package name into the form as shown below. You can add a path and a ve {{ image("plugin/plugin_install_txt.png", "Plugin.txt file") }} +!!! info "Superuser Required" + Only users with superuser privileges can manage plugins via the web interface. + #### Local Directory Custom plugins can be placed in the `data/plugins/` directory, where they will be automatically discovered. This can be useful for developing and testing plugins, but can prove more difficult in production (e.g. when using Docker). diff --git a/docs/docs/plugins/mixins/event.md b/docs/docs/plugins/mixins/event.md index c2f048b055..f3f61a0d1e 100644 --- a/docs/docs/plugins/mixins/event.md +++ b/docs/docs/plugins/mixins/event.md @@ -13,6 +13,9 @@ When a certain (server-side) event occurs, the background worker passes the even {{ image("plugin/enable_events.png", "Enable event integration") }} +!!! info "Worker debugging" + As the events are offloaded to a background worker debugging the `process_event()` function need some extra consideration. Please see the [Run background workers](../../develop/devcontainer.md#run-background-workers) section for further information. + ## Events Events are passed through using a string identifier, e.g. `build.completed` diff --git a/docs/docs/report/helpers.md b/docs/docs/report/helpers.md index 79fde22b2f..aa56d74230 100644 --- a/docs/docs/report/helpers.md +++ b/docs/docs/report/helpers.md @@ -547,14 +547,18 @@ You can add asset images to the reports and labels by using the `{% raw %}{% ass ## Parameters -If you need to load a parameter value for a particular model instance, within the context of your template, you can use the `parameter` template tag: +If you need to reference a parameter for a particular model instance, within the context of your template, you can use the `parameter` template tag: + +### parameter + +This returns a [Parameter](../concepts/parameters.md) object which contains the value of the parameter, as well as any associated metadata (e.g. units, description, etc). ::: report.templatetags.report.parameter options: show_docstring_description: false show_source: False -### Example +#### Example The following example assumes that you have a report or label which contains a valid [Part](../part/index.md) instance: @@ -580,6 +584,27 @@ A [Parameter](../concepts/parameters.md) has the following available attributes: | Units | The *units* of the parameter (e.g. "km") | | Template | A reference to a [ParameterTemplate](../concepts/parameters.md#parameter-templates) | +### parameter_value + +To access just the value of a parameter, use the `parameter_value` template tag: + +::: report.templatetags.report.parameter_value + options: + show_docstring_description: false + show_source: False + +#### Example + +``` +{% raw %} +{% load report %} + +{% parameter_value part "length" backup_value="3"as length_value %} +Part: {{ part.name }}
+Length: {{ length_value }} +{% endraw %} +``` + ## Rendering Markdown Some data fields (such as the *Notes* field available on many internal database models) support [markdown formatting](https://en.wikipedia.org/wiki/Markdown). To render markdown content in a custom report, there are template filters made available through the [django-markdownify](https://github.com/erwinmatijsen/django-markdownify) library. This library provides functionality for converting markdown content to HTML representation, allowing it to be then rendered to PDF by the InvenTree report generation pipeline. diff --git a/docs/docs/settings/admin.md b/docs/docs/settings/admin.md index 8b5fa57ea7..039ba0e026 100644 --- a/docs/docs/settings/admin.md +++ b/docs/docs/settings/admin.md @@ -55,19 +55,12 @@ The admin interface allows *staff* users the ability to directly view / add / ed #### Access Backend Admin Interface -To access the admin interface, select the "Admin" option from the drop-down user menu in the top-right corner of the screen. - - -!!! info "Staff Only" - Only users with staff access will be able to see the "Admin" option +To directly access the admin interface, append /admin/ to the InvenTree site URL - e.g. http://localhost:8000/admin/. An administration panel will be presented as shown below: {{ image("admin/admin.png", "Admin panel") }} -!!! info "Admin URL" - To directly access the admin interface, append /admin/ to the InvenTree site URL - e.g. http://localhost:8000/admin/ - #### View Database Objects Database objects can be listed and filtered directly. The image below shows an example of displaying existing part categories. diff --git a/docs/docs/settings/error_codes.md b/docs/docs/settings/error_codes.md index 59874a9402..bf388e7f2b 100644 --- a/docs/docs/settings/error_codes.md +++ b/docs/docs/settings/error_codes.md @@ -210,6 +210,12 @@ The environment in which the backup was taken does not match the current environ This warning will not prevent you from restoring the backup but it is recommended to ensure the mentioned issues are resolved before restoring the backup to prevent issues with the restored instance. +#### INVE-W14 +**Elevated privileges - Backend** + +A user is logged in with elevated privileges. This might be a superuser or a administrator user. These types of users have elevated permissions and should not be used for regular usage. +Use separate accounts for administrative tasks and regular usage to reduce risk. Make sure to review the [permission documentation](../settings/permissions.md#dangerous-user-flags). + ### INVE-I (InvenTree Information) Information — These are not errors but information messages. They might point out potential issues or just provide information. diff --git a/docs/docs/settings/global.md b/docs/docs/settings/global.md index 66dddda681..c729c61bb4 100644 --- a/docs/docs/settings/global.md +++ b/docs/docs/settings/global.md @@ -27,6 +27,8 @@ Configuration of basic server settings: {{ globalsetting("INVENTREE_INSTANCE_TITLE") }} {{ globalsetting("INVENTREE_INSTANCE_ID", default="Randomly generated value") }} {{ globalsetting("INVENTREE_ANNOUNCE_ID") }} +{{ globalsetting("INVENTREE_SHOW_SUPERUSER_BANNER") }} +{{ globalsetting("INVENTREE_SHOW_ADMIN_BANNER") }} {{ globalsetting("INVENTREE_RESTRICT_ABOUT") }} {{ globalsetting("DISPLAY_FULL_NAMES") }} {{ globalsetting("DISPLAY_PROFILE_INFO") }} diff --git a/docs/docs/settings/permissions.md b/docs/docs/settings/permissions.md index e98fb3aaff..d6b717ed62 100644 --- a/docs/docs/settings/permissions.md +++ b/docs/docs/settings/permissions.md @@ -50,6 +50,17 @@ Within each role, there are four levels of available permissions: | **Add** | The *add* permission allows the user to add / create database records associated with the particular role | | **Delete** | The *delete* permission allows the user to delete / remove database records associated with the particular role | +## Dangerous User Flags + +In addition to the above permissions, there are two special flags that can be assigned to a user: +- **Staff** - A user with the *staff* flag is able to access the admin interface, and can trigger dangerous actions that might have a security impact such as changing parsable files on the server (templates / reports / plugins). Some of these actions require the *admin* role to be assigned as well. +- **Superuser** - A user with the *superuser* flag is able to access and change all data and functions of InvenTree. A superuser can modify and access all data that the InvenTree installation / server has access to - including shell access on the server OS itself. This is a very powerful flag, and should be used with caution. + +It is strongly recommended to register any users with staff / superuser flags with strong MFA methods to reduce the risk of unauthorized access. These accounts should be used with caution, and should not be used for day-to-day operations. + +Practicing account tiering is strongly recommended. + + ## Admin Interface Permissions If a user does not have the required permissions to perform a certain action in the admin interface, those options not be displayed. diff --git a/docs/docs/start/config.md b/docs/docs/start/config.md index a9ca613347..37688941f0 100644 --- a/docs/docs/start/config.md +++ b/docs/docs/start/config.md @@ -185,7 +185,6 @@ Proxy configuration can be complex, and any configuration beyond the basic setup Refer to the [proxy server documentation](./processes.md#proxy-server) for more information. - ## Admin Site Django provides a powerful [administrator interface]({% include "django.html" %}/ref/contrib/admin/) which can be used to manage the InvenTree database. This interface is enabled by default, and available at the `/admin/` URL. @@ -275,7 +274,7 @@ If running with a PostgreSQL database backend, the following additional options | INVENTREE_DB_TIMEOUT | database.timeout | Database connection timeout (s) | 2 | | INVENTREE_DB_TCP_KEEPALIVES | database.tcp_keepalives | TCP keepalive | 1 | | INVENTREE_DB_TCP_KEEPALIVES_IDLE | database.tcp_keepalives_idle | Idle TCP keepalive | 1 | -| INVENTREE_DB_TCP_KEEPALIVES_INTERNAL | database.tcp_keepalives_internal | Internal TCP keepalive | 1| +| INVENTREE_DB_TCP_KEEPALIVES_INTERVAL | database.tcp_keepalives_interval | TCP keepalive interval | 1| | INVENTREE_DB_TCP_KEEPALIVES_COUNT | database.tcp_keepalives_count | TCP keepalive count | 5 | | INVENTREE_DB_ISOLATION_SERIALIZABLE | database.serializable | Database isolation level configured to "serializable" | False | @@ -287,6 +286,18 @@ If running with a MySQL database backend, the following additional options are a | --- | --- | --- | --- | | INVENTREE_DB_ISOLATION_SERIALIZABLE | database.serializable | Database isolation level configured to "serializable" | False | +### SQLite Settings + +!!! warning "SQLite Performance" + SQLite is not recommended for production use, and should only be used for testing or development purposes. If you are using SQLite in production, you may want to adjust the following settings to improve performance. + +If running with a SQLite database backend, the following additional options are available: + +| Environment Variable | Configuration File | Description | Default | +| --- | --- | --- | --- | +| INVENTREE_DB_TIMEOUT | database.timeout | Database connection timeout (s) | 10 | +| INVENTREE_DB_WAL_MODE | database.wal_mode | Enable Write-Ahead Logging (WAL) mode for SQLite databases | True | + ## Caching InvenTree can be configured to use [redis](https://redis.io) as a global cache backend. @@ -401,14 +412,10 @@ It is also possible to use alternative storage backends for static and media fil | Environment Variable | Configuration File | Description | Default | | --- | --- | --- | --- | | INVENTREE_S3_ACCESS_KEY | storage.s3.access_key | Access key | *Not specified* | -| INVENTREE_S3_SECRET_KEY | storage.s3.secret_key | Secret key | -| *Not specified* | -| INVENTREE_S3_BUCKET_NAME | storage.s3.bucket_name | Bucket name, required by most providers | -| *Not specified* | -| INVENTREE_S3_REGION_NAME | storage.s3.region_name | S3 region name | -| *Not specified* | -| INVENTREE_S3_ENDPOINT_URL | storage.s3.endpoint_url | Custom S3 endpoint URL, defaults to AWS endpoints if not set | -| *Not specified* | +| INVENTREE_S3_SECRET_KEY | storage.s3.secret_key | Secret key | *Not specified* | +| INVENTREE_S3_BUCKET_NAME | storage.s3.bucket_name | Bucket name, required by most providers | *Not specified* | +| INVENTREE_S3_REGION_NAME | storage.s3.region_name | S3 region name | *Not specified* | +| INVENTREE_S3_ENDPOINT_URL | storage.s3.endpoint_url | Custom S3 endpoint URL, defaults to AWS endpoints if not set | *Not specified* | | INVENTREE_S3_LOCATION | storage.s3.location | Sub-Location that should be used | inventree-server | | INVENTREE_S3_DEFAULT_ACL | storage.s3.default_acl | Default ACL for uploaded files, defaults to provider default if not set | *Not specified* | | INVENTREE_S3_VERIFY_SSL | storage.s3.verify_ssl | Verify SSL certificate for S3 endpoint | True | @@ -460,6 +467,17 @@ The login-experience can be altered with the following settings: Custom authentication backends can be used by specifying them here. These can for example be used to add [LDAP / AD login](https://django-auth-ldap.readthedocs.io/en/latest/) to InvenTree +## Background Worker Options + +The following options are available for configuring the InvenTree [background worker process](./processes.md#background-worker): + +| Environment Variable | Configuration File | Description | Default | +| --- | --- | --- | --- | +| INVENTREE_BACKGROUND_WORKERS | background.workers | Number of background worker processes | 1 | +| INVENTREE_BACKGROUND_TIMEOUT | background.timeout | Timeout for background worker tasks (seconds) | 90 | +| INVENTREE_BACKGROUND_RETRY | background.retry | Time to wait before retrying a background task (seconds) | 300 | +| INVENTREE_BACKGROUND_MAX_ATTEMPTS | background.max_attempts | Maximum number of attempts for a background task | 5 | + ## Sentry Integration The InvenTree server can be integrated with the [sentry.io](https://sentry.io) monitoring service, for error logging and performance tracking. @@ -546,4 +564,4 @@ To override global settings, provide a "dictionary" of settings overrides in the | Environment Variable | Configuration File | Description | Default | | --- | --- | --- | --- | -| GLOBAL_SETTINGS_OVERRIDES | global_settings_overrides | JSON object containing global settings overrides | *Not specified* | +| INVENTREE_GLOBAL_SETTINGS | global_settings | JSON object containing global settings overrides | *Not specified* | diff --git a/docs/docs/start/installer.md b/docs/docs/start/installer.md index 562b2bd936..997a0fefc8 100644 --- a/docs/docs/start/installer.md +++ b/docs/docs/start/installer.md @@ -118,6 +118,9 @@ Extra python packages can be installed by setting the environment variable `SETU The used database backend can be configured with environment variables (before the first setup) or in the config file after the installation. Check the [configuration section](./config.md#database-options) for more information. +!!! warning "SQLite Performance" + SQLite is not recommended for production use, as it is not designed for high concurrency. + ## Moving Data To change the data storage location, link the new location to `/opt/inventree/data`. A rough outline of steps to achieve this could be: diff --git a/docs/docs/start/migrate.md b/docs/docs/start/migrate.md index 7eff14a5a1..808ce776bc 100644 --- a/docs/docs/start/migrate.md +++ b/docs/docs/start/migrate.md @@ -67,6 +67,10 @@ invoke import-records -c -f data.json !!! warning "Character Encoding" If the character encoding of the data file does not exactly match the target database, the import operation may not succeed. In this case, some manual editing of the database JSON file may be required. +``` +{{ invoke_commands('import-records --help') }} +``` + ### Copy Media Files Any media files (images, documents, etc) that were stored in the original database must be copied to the new database. In a typical InvenTree installation, these files are stored in the `media` subdirectory of the InvenTree data location. @@ -197,3 +201,32 @@ This will load the database records from the backup file into the new database. ### Caveats The process described here is a *suggested* procedure for migrating between incompatible database versions. However, due to the complexity of database software, there may be unforeseen complications that arise during the process. + +## Migrating Plugin Data + +Custom plugins may define their own database models, and thus have their own data records stored in the database. If a plugin is being migrated from one InvenTree installation to another, then the plugin data must also be migrated. + +To account for this, the `export-records` and `import-records` commands have been designed to also export and import plugin data, in addition to the core InvenTree data. + +### Exporting Plugin Data + +When running the `export-records` command, any data records associated with plugins will also be exported, and included in the output JSON file. + +### Importing Plugin Data + +When running the `import-records` command, the import process will also attempt to import any plugin data records contained in the input JSON file. However, for the plugin data to be imported correctly, the following conditions must be met: + +1. The plugin *code* must be present in the new InvenTree installation. Any plugins *not* installed will not have their tables created, and thus the import process will fail for those records. +2. The plugin *version* must be the same in both installations. If the plugin version is different, then the database schema may be different, and thus the import process may fail. +3. The InvenTree software version must be the same in both installations. If the InvenTree version is different, then the database schema may be different, and thus the import process may fail. + +If all of the above conditions are met, then the plugin data *should* be imported correctly into the new database. To achieve this reliably, the following process steps are implemented in the `import-records` command: + +1. The database is cleaned of all existing records (if the `-c` option is used). +2. The core InvenTree database migrations are run to ensure that the core database schema is correct. +3. User auth records are imported into the database +4. Common configuration records (such as global settings) are imported into the database +5. Plugin configuration records (defining which plugins are active) are imported into the database +6. Database migrations are run once more, to ensure that any plugin database schema are correctly initialized +7. The database is checked to ensure that all required apps are present (i.e. all plugins are installed and correctly activated) +8. All remaining records (including plugin data) are imported into the database diff --git a/docs/docs/start/processes.md b/docs/docs/start/processes.md index 826644a596..591e0b407c 100644 --- a/docs/docs/start/processes.md +++ b/docs/docs/start/processes.md @@ -16,7 +16,22 @@ InvenTree supports a [number of database backends]({% include "django.html" %}/r Refer to the [database configuration guide](./config.md#database-options) for more information on selecting and configuring the database backend. -In running InvenTree via [docker compose](./docker_install.md), the database process is managed by the `inventree-db` service which provides a [Postgres docker container](https://hub.docker.com/_/postgres). +If running InvenTree via [docker compose](./docker_install.md), the database process is managed by the `inventree-db` service which provides a [Postgres docker container](https://hub.docker.com/_/postgres). + +!!! tip "Postgres Recommended" + We recommend using Postgres as the database backend for InvenTree, as it is a robust and scalable database which is well-suited to production use. + +#### SQLite Limitations + +!!! warning "SQLite Performance" + SQLite is not recommended for production use, as it is not designed for high concurrency. + +While SQLite is supported, it is strongly *not* recommended for a production installation, especially where there may be multiple users accessing the system concurrently. SQLite is designed for low-concurrency applications, and can experience performance issues when multiple users are accessing the database at the same time. + +In addition to concurrency issues, there are other structural limitations which exist in SQLite that can prevent operations on large querysets. + +If you are using SQLite, you should be aware of these limitations. It is important to ensure that the database file is stored on a fast storage medium (such as an SSD), and that the database options are configured correctly to minimize locking issues. Refer to the [database configuration guide](./config.md#database-options) for more information on configuring SQLite options. + ### Web Server @@ -112,6 +127,8 @@ If the background worker process is not running, InvenTree will not be able to p If the [cache server](#cache-server) is not running, the background worker will be limited to running a single threaded worker. This is because the background worker uses the cache server to manage task locking, and without a global cache server to communicate between processes, concurrency issues can occur. +Additionally, if you are running SQLite as the database backend, the background worker will be limited to a single thread, due to database locking issues which can occur with SQLite when multiple threads are accessing the database concurrently. + ### Cache Server The InvenTree cache server is used to store temporary data which is shared between the InvenTree web server and the background worker processes. The cache server is also used to store task information, and to manage task locking between the background worker processes. @@ -122,7 +139,11 @@ InvenTree uses the [Redis](https://redis.io/) cache server to manage cache data. !!! info "Redis on Docker" Docker adds an additional network layer - that might lead to lower performance than bare metal. - To optimize and configure your redis deployment follow the [official docker guide](https://redis.io/docs/getting-started/install-stack/docker/#configuration). + To optimize and configure your redis deployment follow the [official docker guide](https://redis.io/docs/latest/operate/oss_and_stack/install/install-stack/docker/). !!! tip "Enable Cache" While a redis container is provided in the default configuration, by default it is not enabled in the InvenTree server. You can enable redis cache support by following the [caching configuration guide](./config.md#caching) + +### Configuration + +Refer to the [background worker configuration options](./config.md#background-worker-options) for more information on configuring the background worker process. diff --git a/docs/docs/stock/index.md b/docs/docs/stock/index.md index d3c544a3c8..83ec1e5f78 100644 --- a/docs/docs/stock/index.md +++ b/docs/docs/stock/index.md @@ -24,7 +24,7 @@ Each *Stock Item* is linked to the following information: **Last Updated** - Date that the stock quantity was last updated -**Last Stocktake** - Date of most recent stocktake (count) of this item +**Last Stocktake** - Date that this stock item was last counted **Status** - Status of this stock item diff --git a/docs/requirements.txt b/docs/requirements.txt index 440c3c41f8..a7b56c1d5c 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -11,14 +11,14 @@ babel==2.18.0 \ # -c src/backend/requirements.txt # mkdocs-git-revision-date-localized-plugin # mkdocs-material -backrefs==6.1 \ - --hash=sha256:13eafbc9ccd5222e9c1f0bec563e6d2a6d21514962f11e7fc79872fd56cbc853 \ - --hash=sha256:2a2ccb96302337ce61ee4717ceacfbf26ba4efb1d55af86564b8bbaeda39cac1 \ - --hash=sha256:3bba1749aafe1db9b915f00e0dd166cba613b6f788ffd63060ac3485dc9be231 \ - --hash=sha256:4c9d3dc1e2e558965202c012304f33d4e0e477e1c103663fd2c3cc9bb18b0d05 \ - --hash=sha256:a9e99b8a4867852cad177a6430e31b0f6e495d65f8c6c134b68c14c3c95bf4b0 \ - --hash=sha256:c64698c8d2269343d88947c0735cb4b78745bd3ba590e10313fbf3f78c34da5a \ - --hash=sha256:e82bba3875ee4430f4de4b6db19429a27275d95a5f3773c57e9e18abc23fd2b7 +backrefs==6.2 \ + --hash=sha256:08aa7fae530c6b2361d7bdcbda1a7c454e330cc9dbcd03f5c23205e430e5c3be \ + --hash=sha256:0fdc7b012420b6b144410342caeb8adc54c6866cf12064abc9bb211302e496f8 \ + --hash=sha256:12df81596ab511f783b7d87c043ce26bc5b0288cf3bb03610fe76b8189282b2b \ + --hash=sha256:664e33cd88c6840b7625b826ecf2555f32d491800900f5a541f772c485f7cda7 \ + --hash=sha256:c3f4b9cb2af8cda0d87ab4f57800b57b95428488477be164dd2b47be54db0c90 \ + --hash=sha256:e5f805ae09819caa1aa0623b4a83790e7028604aa2b8c73ba602c4454e665de7 \ + --hash=sha256:f44ff4d48808b243b6c0cdc6231e22195c32f77046018141556c66f8bab72a49 # via mkdocs-material beautifulsoup4==4.14.3 \ --hash=sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb \ @@ -36,120 +36,136 @@ certifi==2026.2.25 \ # httpcore # httpx # requests -charset-normalizer==3.4.4 \ - --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ - --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ - --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ - --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ - --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \ - --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ - --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \ - --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \ - --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ - --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ - --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ - --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \ - --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ - --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \ - --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ - --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \ - --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ - --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ - --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ - --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ - --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \ - --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ - --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \ - --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ - --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \ - --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ - --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ - --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ - --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \ - --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ - --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ - --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ - --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \ - --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ - --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ - --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ - --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ - --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ - --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \ - --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ - --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ - --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ - --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ - --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ - --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ - --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \ - --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ - --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ - --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ - --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ - --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \ - --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \ - --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ - --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ - --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \ - --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ - --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ - --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ - --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ - --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ - --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ - --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ - --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ - --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ - --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ - --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ - --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ - --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ - --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ - --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ - --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \ - --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \ - --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ - --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ - --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ - --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ - --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \ - --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \ - --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ - --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ - --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \ - --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ - --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ - --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \ - --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ - --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ - --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \ - --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \ - --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \ - --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ - --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ - --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ - --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ - --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ - --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ - --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ - --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ - --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ - --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \ - --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \ - --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ - --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ - --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ - --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \ - --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ - --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ - --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ - --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ - --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \ - --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ - --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \ - --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ - --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 +charset-normalizer==3.4.6 \ + --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ + --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ + --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ + --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ + --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ + --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ + --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ + --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ + --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ + --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ + --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ + --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ + --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ + --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ + --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ + --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ + --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ + --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ + --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ + --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ + --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ + --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ + --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ + --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ + --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ + --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ + --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ + --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ + --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ + --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ + --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ + --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ + --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ + --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ + --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ + --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ + --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ + --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ + --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ + --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ + --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ + --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ + --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ + --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ + --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ + --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ + --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ + --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ + --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ + --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ + --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ + --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ + --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ + --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ + --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ + --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ + --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ + --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ + --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ + --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ + --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ + --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ + --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ + --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ + --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ + --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ + --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ + --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ + --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ + --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ + --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ + --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ + --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ + --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ + --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ + --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ + --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ + --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ + --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ + --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ + --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ + --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ + --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ + --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ + --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ + --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ + --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ + --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ + --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ + --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ + --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ + --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ + --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ + --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ + --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ + --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ + --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ + --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ + --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ + --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ + --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ + --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ + --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ + --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ + --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ + --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ + --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ + --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ + --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ + --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ + --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ + --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ + --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ + --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ + --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ + --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ + --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ + --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ + --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ + --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ + --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ + --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ + --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ + --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ + --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ + --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ + --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ + --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ + --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 # via # -c src/backend/requirements.txt # requests @@ -162,9 +178,7 @@ click==8.3.1 \ colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via - # griffe - # mkdocs-material + # via mkdocs-material editorconfig==0.17.1 \ --hash=sha256:1eda9c2c0db8c16dbd50111b710572a5e6de934e39772de1959d41f64fc17c82 \ --hash=sha256:23c08b00e8e08cc3adcddb825251c497478df1dada6aefeb01e626ad37303745 @@ -173,9 +187,9 @@ essentials==1.1.9 \ --hash=sha256:71ef161e0e27ef77cd6f5fc05e0b8688a575fcab870c01c95940f832e321dfbb \ --hash=sha256:7fbea3a518cbeafe5374fb7e2ea2c15a109e8a7fd1eaab62ae87cbd1b3b1e8d0 # via essentials-openapi -essentials-openapi==1.3.0 \ - --hash=sha256:453327a0a847a431133f4472ced7e4a9180bf667437049b57381ddf88079e886 \ - --hash=sha256:9c2a88531e2c70c565d5b526d74043941e46f60c114f7a0e3ae91e9e6bef4dae +essentials-openapi==1.4.0 \ + --hash=sha256:578c81501ccf6d18c0839d60636214fbd051f0ef37f1d207d4e3c92de2aac008 \ + --hash=sha256:86d879c32734248ad52482a90ee89a32883bce348b4edd323c01556b505b45b9 # via neoteroi-mkdocs ghp-import==2.1.0 \ --hash=sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619 \ @@ -189,9 +203,8 @@ gitpython==3.1.46 \ --hash=sha256:400124c7d0ef4ea03f7310ac2fbf7151e09ff97f2a3288d64a440c584a29c37f \ --hash=sha256:79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058 # via mkdocs-git-revision-date-localized-plugin -griffe==1.15.0 \ - --hash=sha256:6f6762661949411031f5fcda9593f586e6ce8340f0ba88921a0f2ef7a81eb9a3 \ - --hash=sha256:7726e3afd6f298fbc3696e67958803e7ac843c1cfe59734b6251a40cdbfb5eea +griffelib==2.0.0 \ + --hash=sha256:01284878c966508b6d6f1dbff9b6fa607bc062d8261c5c7253cb285b06422a7f # via mkdocstrings-python h11==0.16.0 \ --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ @@ -369,15 +382,15 @@ mkdocs==1.6.1 \ # mkdocs-simple-hooks # mkdocstrings # neoteroi-mkdocs -mkdocs-autorefs==1.4.3 \ - --hash=sha256:469d85eb3114801d08e9cc55d102b3ba65917a869b893403b8987b601cf55dc9 \ - --hash=sha256:beee715b254455c4aa93b6ef3c67579c399ca092259cc41b7d9342573ff1fc75 +mkdocs-autorefs==1.4.4 \ + --hash=sha256:834ef5408d827071ad1bc69e0f39704fa34c7fc05bc8e1c72b227dfdc5c76089 \ + --hash=sha256:d54a284f27a7346b9c38f1f852177940c222da508e66edc816a0fa55fc6da197 # via # mkdocstrings # mkdocstrings-python -mkdocs-get-deps==0.2.0 \ - --hash=sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c \ - --hash=sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134 +mkdocs-get-deps==0.2.2 \ + --hash=sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1 \ + --hash=sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650 # via mkdocs mkdocs-git-revision-date-localized-plugin==1.5.1 \ --hash=sha256:2b0239455cd84784dd87ac8dfc9253fe4b2dd35e102696f21b5d34e2175981c6 \ @@ -391,9 +404,9 @@ mkdocs-macros-plugin==1.5.0 \ --hash=sha256:12aa45ce7ecb7a445c66b9f649f3dd05e9b92e8af6bc65e4acd91d26f878c01f \ --hash=sha256:c10fabd812bf50f9170609d0ed518e54f1f0e12c334ac29141723a83c881dd6f # via -r docs/requirements.in -mkdocs-material==9.7.3 \ - --hash=sha256:37ebf7b4788c992203faf2e71900be3c197c70a4be9b0d72aed537b08a91dd9d \ - --hash=sha256:e5f0a18319699da7e78c35e4a8df7e93537a888660f61a86bd773a7134798f22 +mkdocs-material==9.7.6 \ + --hash=sha256:00bdde50574f776d328b1862fe65daeaf581ec309bd150f7bff345a098c64a69 \ + --hash=sha256:71b84353921b8ea1ba84fe11c50912cc512da8fe0881038fcc9a0761c0e635ba # via -r docs/requirements.in mkdocs-material-extensions==1.3.1 \ --hash=sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443 \ @@ -417,9 +430,9 @@ mkdocstrings[python]==1.0.3 \ # via # -r docs/requirements.in # mkdocstrings-python -mkdocstrings-python==2.0.1 \ - --hash=sha256:66ecff45c5f8b71bf174e11d49afc845c2dfc7fc0ab17a86b6b337e0f24d8d90 \ - --hash=sha256:843a562221e6a471fefdd4b45cc6c22d2607ccbad632879234fa9692e9cf7732 +mkdocstrings-python==2.0.3 \ + --hash=sha256:0b83513478bdfd803ff05aa43e9b1fca9dd22bcd9471f09ca6257f009bc5ee12 \ + --hash=sha256:c518632751cc869439b31c9d3177678ad2bfa5c21b79b863956ad68fc92c13b8 # via mkdocstrings neoteroi-mkdocs==1.2.0 \ --hash=sha256:58e25cb1b9db093ffa8d12bdb33264bf567cac30fb964b56e0a493efa749ad6e \ @@ -436,27 +449,27 @@ paginate==0.5.7 \ --hash=sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945 \ --hash=sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591 # via mkdocs-material -pathspec==1.0.1 \ - --hash=sha256:8870061f22c58e6d83463cfce9a7dd6eca0512c772c1001fb09ac64091816721 \ - --hash=sha256:e2769b508d0dd47b09af6ee2c75b2744a2cb1f474ae4b1494fd6a1b7a841613c +pathspec==1.0.4 \ + --hash=sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645 \ + --hash=sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723 # via # mkdocs # mkdocs-macros-plugin -platformdirs==4.9.2 \ - --hash=sha256:9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd \ - --hash=sha256:9a33809944b9db043ad67ca0db94b14bf452cc6aeaac46a88ea55b26e2e9d291 +platformdirs==4.9.4 \ + --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ + --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 # via # -c src/backend/requirements.txt # mkdocs-get-deps -pygments==2.19.2 \ - --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \ - --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 # via # mkdocs-material # rich -pymdown-extensions==10.20 \ - --hash=sha256:5c73566ab0cf38c6ba084cb7c5ea64a119ae0500cce754ccb682761dfea13a52 \ - --hash=sha256:ea9e62add865da80a271d00bfa1c0fa085b20d133fb3fc97afdc88e682f60b2f +pymdown-extensions==10.21.2 \ + --hash=sha256:5c0fd2a2bea14eb39af8ff284f1066d898ab2187d81b889b75d46d4348c01638 \ + --hash=sha256:c3f55a5b8a1d0edf6699e35dcbea71d978d34ff3fa79f3d807b8a5b3fa90fbdc # via # mkdocs-material # mkdocs-mermaid2-plugin @@ -554,9 +567,9 @@ pyyaml-env-tag==1.1 \ --hash=sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04 \ --hash=sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff # via mkdocs -requests==2.32.5 \ - --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ - --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 # via # -c src/backend/requirements.txt # mkdocs-macros-plugin @@ -566,9 +579,9 @@ rich==14.3.3 \ --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b # via neoteroi-mkdocs -setuptools==82.0.0 \ - --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ - --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 +setuptools==82.0.1 \ + --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \ + --hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb # via # -c src/backend/requirements.txt # mkdocs-mermaid2-plugin @@ -579,13 +592,13 @@ six==1.17.0 \ # -c src/backend/requirements.txt # jsbeautifier # python-dateutil -smmap==5.0.2 \ - --hash=sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5 \ - --hash=sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e +smmap==5.0.3 \ + --hash=sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c \ + --hash=sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f # via gitdb -soupsieve==2.8.1 \ - --hash=sha256:4cf733bc50fa805f5df4b8ef4740fc0e0fa6218cf3006269afd3f9d6d80fd350 \ - --hash=sha256:a11fe2a6f3d76ab3cf2de04eb339c1be5b506a8a47f2ceb6d139803177f85434 +soupsieve==2.8.3 \ + --hash=sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349 \ + --hash=sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95 # via beautifulsoup4 super-collections==0.6.2 \ --hash=sha256:0c8d8abacd9fad2c7c1c715f036c29f5db213f8cac65f24d45ecba12b4da187a \ diff --git a/pyproject.toml b/pyproject.toml index b8fe778766..9ce50f3710 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -108,11 +108,12 @@ root = ["src/backend/InvenTree"] unresolved-reference="ignore" # 21 # see https://github.com/astral-sh/ty/issues/220 unresolved-attribute="ignore" # 505 # need Plugin Mixin typing call-non-callable="ignore" # 8 ## +invalid-assignment="ignore" # 17 # need to wait for better django field stubs +invalid-method-override="ignore" # 99 invalid-return-type="ignore" # 22 ## +possibly-missing-attribute="ignore" # 25 # https://github.com/astral-sh/ty/issues/164 +unknown-argument="ignore" # 3 # need to wait for better django field stubs invalid-argument-type="ignore" # 49 -possibly-unbound-attribute="ignore" # 25 # https://github.com/astral-sh/ty/issues/164 -unknown-argument="ignore" # 3 # need to wait for betterdjango field stubs -invalid-assignment="ignore" # 17 # need to wait for betterdjango field stubs no-matching-overload="ignore" # 3 # need to wait for betterdjango field stubs [tool.coverage.run] @@ -139,3 +140,4 @@ django_find_project = false pythonpath = ["src/backend/InvenTree"] DJANGO_SETTINGS_MODULE = "InvenTree.settings" python_files = ["test*.py",] +timeout = "120" diff --git a/src/backend/InvenTree/.gitignore b/src/backend/InvenTree/.gitignore index ec668443c9..a91adca39b 100644 --- a/src/backend/InvenTree/.gitignore +++ b/src/backend/InvenTree/.gitignore @@ -1,5 +1,6 @@ # Files generated during unit testing _testfolder/ +_tests_report*.txt # Playwright files for CI InvenTree/static/img/playwright*.png diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index 79173c6ab4..31a9f0aa39 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -423,23 +423,19 @@ class BulkOperationMixin: def get_bulk_queryset(self, request): """Return a queryset based on the selection made in the request. - Selection can be made by providing either: - - - items: A list of primary key values - - filters: A dictionary of filter values + Selection can be made by providing a list of primary key values, + which will be used to filter the queryset. """ - model = self.serializer_class.Meta.model - items = request.data.pop('items', None) - filters = request.data.pop('filters', None) all_filter = request.GET.get('all', None) - queryset = model.objects.all() + # Return the base queryset for this model + queryset = self.get_queryset() - if not items and not filters and all_filter is None: + if not items and all_filter is None: raise ValidationError({ 'non_field_errors': _( - 'List of items or filters must be provided for bulk operation' + 'List of items must be provided for bulk operation' ) }) @@ -457,19 +453,6 @@ class BulkOperationMixin: 'non_field_errors': _('Invalid items list provided') }) - if filters: - if type(filters) is not dict: - raise ValidationError({ - 'non_field_errors': _('Filters must be provided as a dict') - }) - - try: - queryset = queryset.filter(**filters) - except Exception: - raise ValidationError({ - 'non_field_errors': _('Invalid filters provided') - }) - if all_filter and not helpers.str2bool(all_filter): raise ValidationError({ 'non_field_errors': _('All filter must only be used with true') @@ -507,7 +490,7 @@ class BulkCreateMixin: if unique_create_fields := getattr(self, 'unique_create_fields', None): existing = collections.defaultdict(list) for idx, item in enumerate(data): - key = tuple(item[v] for v in unique_create_fields) + key = tuple(item[v] for v in list(unique_create_fields)) # type: ignore[not-subscriptable] existing[key].append(idx) unique_errors = [[] for _ in range(len(data))] @@ -594,17 +577,24 @@ class BulkUpdateMixin(BulkOperationMixin): n = queryset.count() + instance_data = [] + with transaction.atomic(): # Perform object update # Note that we do not perform a bulk-update operation here, # as we want to trigger any custom post_save methods on the model + + # Run validation first for instance in queryset: serializer = self.get_serializer(instance, data=data, partial=True) - serializer.is_valid(raise_exception=True) serializer.save() - return Response({'success': f'Updated {n} items'}, status=200) + instance_data.append(serializer.data) + + return Response( + {'success': f'Updated {n} items', 'items': instance_data}, status=200 + ) class ParameterListMixin: diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 68b040ae75..50e2ea5ca4 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,11 +1,59 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 461 +INVENTREE_API_VERSION = 476 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v476 -> 2026-04-09 : https://github.com/inventree/InvenTree/pull/11705 + - Adds sorting / filtering / searching functionality to the SelectionListEntry API endpoint + +v475 -> 2026-04-09 : https://github.com/inventree/InvenTree/pull/11702 + - Adds "updated" and "updated_by" fields to the LabelTemplate and ReportTemplate API endpoints + +v474 -> 2026-04-08 : https://github.com/inventree/InvenTree/pull/11693 + - Adds DataImportMixin to the ManufacturerPartList API endpoint + +v473 -> 2026-04-08 : https://github.com/inventree/InvenTree/pull/11692 + - Adds "line" field to PurchaseOrderLineItem and PurchaseOrderExtraLineItem API endpoints + - Adds "line" field to SalesOrderLineItem and SalesOrderExtraLineItem API endpoints + - Adds "line" field to ReturnOrderLineItem and ReturnOrderExtraLineItem API endpoints + +v472 -> 2026-04-01 : https://github.com/inventree/InvenTree/pull/xxxx + - Fixes writable fields on the user detail endpoint + +v471 -> 2026-04-07 : https://github.com/inventree/InvenTree/pull/11685 + - Adds data importer support for the "SalesOrderShipment" model + +v470 -> 2026-04-01 : https://github.com/inventree/InvenTree/pull/11659 + - Renames "is_staff" field to "is_admin" and updates help texts accordingly to highlight current security boundaries + +v469 -> 2026-03-31 : https://github.com/inventree/InvenTree/pull/11641 + - Adds parameter support to the SalesOrderShipment model and API endpoints + +v468 -> 2026-03-31 : https://github.com/inventree/InvenTree/pull/11649 + - Add ordering to contentype related fields - no functional changes + +v467 -> 2026-03-20 : https://github.com/inventree/InvenTree/pull/11573 + - Fix definition for the "parent" field on the StockItemSerializer + +v466 -> 2026-03-17 : https://github.com/inventree/InvenTree/pull/11525 + - SalesOrderShipmentComplete endpoint now returns a task ID which can be used to track the progress of the shipment completion process + +v465 -> 2026-03-16 : https://github.com/inventree/InvenTree/pull/11529/ + - BuildOrderAutoAllocate endpoint now returns a task ID which can be used to track the progress of the auto-allocation process + - BuildOrderConsume endpoint now returns a task ID which can be used to track the progress of the stock consumption process + +v464 -> 2026-03-15 : https://github.com/inventree/InvenTree/pull/11527 + - Add API endpoint for monitoring the progress of a particular background task + +v463 -> 2026-03-12 : https://github.com/inventree/InvenTree/pull/11499 + - Allow "bulk update" actions against StockItem endpoint + +v462 -> 2026-03-12 : https://github.com/inventree/InvenTree/pull/11497 + - Allow "ScheduledTask" API endpoint to be filtered by "name" field + v461 -> 2026-03-10 : https://github.com/inventree/InvenTree/pull/11479 - Adds option to copy parameters when duplicating an order via the API @@ -304,12 +352,6 @@ v381 -> 2025-08-06 : https://github.com/inventree/InvenTree/pull/10132 v380 -> 2025-08-06 : https://github.com/inventree/InvenTree/pull/10135 - Fixes "issued_by" filter for the BuildOrder list API endpoint -v380 -> 2025-08-06 : https://github.com/inventree/InvenTree/pull/10132 - - Refactor the "return stock item" API endpoint to align with other stock adjustment actions - -v380 -> 2025-08-06 : https://github.com/inventree/InvenTree/pull/10135 - - Fixes "issued_by" filter for the BuildOrder list API endpoint - v379 -> 2025-08-04 : https://github.com/inventree/InvenTree/pull/10124 - Removes "PartStocktakeReport" model and associated API endpoints - Remove "last_stocktake" field from the Part model diff --git a/src/backend/InvenTree/InvenTree/config.py b/src/backend/InvenTree/InvenTree/config.py index 7392543441..d71d80e567 100644 --- a/src/backend/InvenTree/InvenTree/config.py +++ b/src/backend/InvenTree/InvenTree/config.py @@ -191,7 +191,7 @@ def load_config_data(set_cache: bool = False) -> map | None: if CONFIG_DATA is not None and not set_cache: return CONFIG_DATA - import yaml + import yaml.parser cfg_file = get_config_file() diff --git a/src/backend/InvenTree/InvenTree/exceptions.py b/src/backend/InvenTree/InvenTree/exceptions.py index dbb623eb5b..161860339d 100644 --- a/src/backend/InvenTree/InvenTree/exceptions.py +++ b/src/backend/InvenTree/InvenTree/exceptions.py @@ -66,7 +66,7 @@ def log_error( data = error_data else: try: - formatted_exception = traceback.format_exception(kind, info, data) # type: ignore[no-matching-overload] + formatted_exception = traceback.format_exception(kind, info, data) data = '\n'.join(formatted_exception) except AttributeError: data = 'No traceback information available' diff --git a/src/backend/InvenTree/InvenTree/helpers.py b/src/backend/InvenTree/InvenTree/helpers.py index efa4d355c6..bd358a9fe6 100644 --- a/src/backend/InvenTree/InvenTree/helpers.py +++ b/src/backend/InvenTree/InvenTree/helpers.py @@ -8,6 +8,7 @@ import json import os.path import re from decimal import Decimal, InvalidOperation +from pathlib import Path from typing import Optional, TypeVar from wsgiref.util import FileWrapper from zoneinfo import ZoneInfo, ZoneInfoNotFoundError @@ -21,19 +22,19 @@ from django.http import StreamingHttpResponse from django.utils import timezone from django.utils.translation import gettext_lazy as _ -import bleach -import bleach.css_sanitizer -import bleach.sanitizer +import nh3 import structlog -from bleach import clean from djmoney.money import Money from PIL import Image from stdimage.models import StdImageField, StdImageFieldFile from common.currency import currency_code_default - -from .setting.storages import StorageBackends -from .settings import MEDIA_URL, STATIC_URL +from InvenTree.sanitizer import ( + DEAFAULT_ATTRS, + DEFAULT_CSS, + DEFAULT_PROTOCOLS, + DEFAULT_TAGS, +) logger = structlog.get_logger('inventree') @@ -186,9 +187,8 @@ def getMediaUrl( ) if name is not None: file = regenerate_imagefile(file, name) - if settings.STORAGE_TARGET == StorageBackends.S3: - return str(file.url) - return os.path.join(MEDIA_URL, str(file.url)) + + return default_storage.url(file.name) def regenerate_imagefile(_file, _name: str): @@ -199,7 +199,7 @@ def regenerate_imagefile(_file, _name: str): _name: Name of the variation (e.g. 'thumbnail', 'preview') """ name = _file.field.attr_class.get_variation_name(_file.name, _name) - return ImageFieldFile(_file.instance, _file, name) # type: ignore + return ImageFieldFile(_file.instance, _file, name) # ty:ignore[too-many-positional-arguments] def image2name(img_obj: StdImageField, do_preview: bool, do_thumbnail: bool): @@ -226,11 +226,18 @@ def image2name(img_obj: StdImageField, do_preview: bool, do_thumbnail: bool): def getStaticUrl(filename): """Return the qualified access path for the given file, under the static media directory.""" - return os.path.join(STATIC_URL, str(filename)) + return StaticFilesStorage().url(filename) -def TestIfImage(img): - """Test if an image file is indeed an image.""" +def TestIfImage(img) -> bool: + """Test if an image file is indeed an image. + + Arguments: + img: A file-like object + + Returns: + True if the file is a valid image, False otherwise + """ try: Image.open(img).verify() return True @@ -248,6 +255,13 @@ def getBlankThumbnail(): return getStaticUrl('img/blank_image.thumbnail.png') +def checkStaticFile(*args) -> bool: + """Check if a file exists in the static storage.""" + static_storage = StaticFilesStorage() + fn = Path(*args) + return static_storage.exists(str(fn)) + + def getLogoImage(as_file=False, custom=True): """Return the InvenTree logo image, or a custom logo if available.""" if custom and settings.CUSTOM_LOGO: @@ -311,7 +325,7 @@ def TestIfImageURL(url): ] -def str2bool(text, test=True): +def str2bool(text, test=True) -> bool: """Test if a string 'looks' like a boolean value. Args: @@ -881,13 +895,13 @@ def clean_decimal(number): def strip_html_tags(value: str, raise_error=True, field_name=None): - """Strip HTML tags from an input string using the bleach library. + """Strip HTML tags from an input string using the nh3 library. If raise_error is True, a ValidationError will be thrown if HTML tags are detected """ value = str(value).strip() - cleaned = clean(value, strip=True, tags=[], attributes=[]) + cleaned = nh3.clean(value, tags=frozenset()) # Add escaped characters back in replacements = {'>': '>', '<': '<', '&': '&'} @@ -947,34 +961,32 @@ def clean_markdown(value: str) -> str: output_format='html', ) - # Bleach settings - whitelist_tags = markdownify_settings.get( - 'WHITELIST_TAGS', bleach.sanitizer.ALLOWED_TAGS - ) - whitelist_attrs = markdownify_settings.get( - 'WHITELIST_ATTRS', bleach.sanitizer.ALLOWED_ATTRIBUTES - ) - whitelist_styles = markdownify_settings.get( - 'WHITELIST_STYLES', bleach.css_sanitizer.ALLOWED_CSS_PROPERTIES - ) + # nh3 sanitizer settings + whitelist_tags = markdownify_settings.get('WHITELIST_TAGS', DEFAULT_TAGS) + whitelist_attrs = markdownify_settings.get('WHITELIST_ATTRS', DEAFAULT_ATTRS) + whitelist_styles = markdownify_settings.get('WHITELIST_STYLES', DEFAULT_CSS) whitelist_protocols = markdownify_settings.get( - 'WHITELIST_PROTOCOLS', bleach.sanitizer.ALLOWED_PROTOCOLS + 'WHITELIST_PROTOCOLS', DEFAULT_PROTOCOLS ) - strip = markdownify_settings.get('STRIP', True) - css_sanitizer = bleach.css_sanitizer.CSSSanitizer( - allowed_css_properties=whitelist_styles - ) - cleaner = bleach.Cleaner( - tags=whitelist_tags, - attributes=whitelist_attrs, - css_sanitizer=css_sanitizer, - protocols=whitelist_protocols, - strip=strip, - ) + # Convert bleach-style attributes (list or dict) to nh3-compatible dict format + if isinstance(whitelist_attrs, (list, tuple, set, frozenset)): + attrs_dict = {'*': set(whitelist_attrs)} + elif isinstance(whitelist_attrs, dict): + attrs_dict = {tag: set(allowed) for tag, allowed in whitelist_attrs.items()} + else: + attrs_dict = None # Clean the HTML content (for comparison). This must be the same as the original content - clean_html = cleaner.clean(html) + clean_html = nh3.clean( + html, + tags=set(whitelist_tags), + attributes=attrs_dict, + url_schemes=set(whitelist_protocols), + filter_style_properties=set(whitelist_styles), + link_rel=None, + strip_comments=True, + ) if html != clean_html: raise ValidationError(_('Data contains prohibited markdown content')) diff --git a/src/backend/InvenTree/InvenTree/helpers_email.py b/src/backend/InvenTree/InvenTree/helpers_email.py index de90c0d323..f6dca007f2 100644 --- a/src/backend/InvenTree/InvenTree/helpers_email.py +++ b/src/backend/InvenTree/InvenTree/helpers_email.py @@ -8,6 +8,7 @@ import structlog from allauth.account.models import EmailAddress import InvenTree.ready +import InvenTree.tasks as tasks from common.models import Priority, issue_mail logger = structlog.get_logger('inventree') @@ -98,7 +99,7 @@ def send_email( ) return False, 'INVE-W7: no from_email or DEFAULT_FROM_EMAIL specified' - InvenTree.tasks.offload_task( + tasks.offload_task( issue_mail, subject=subject, body=body, diff --git a/src/backend/InvenTree/InvenTree/helpers_model.py b/src/backend/InvenTree/InvenTree/helpers_model.py index f942c4a506..8bbaad6912 100644 --- a/src/backend/InvenTree/InvenTree/helpers_model.py +++ b/src/backend/InvenTree/InvenTree/helpers_model.py @@ -1,9 +1,11 @@ """Provides helper functions used throughout the InvenTree project that access the database.""" import io +import ipaddress +import socket from decimal import Decimal from typing import Optional, cast -from urllib.parse import urljoin +from urllib.parse import urljoin, urlparse from django.conf import settings from django.core.exceptions import ValidationError @@ -88,6 +90,36 @@ def construct_absolute_url(*arg, base_url=None, request=None): return urljoin(base_url, relative_url) +def validate_url_no_ssrf(url): + """Validate that a URL does not point to a private/internal network address. + + Resolves the hostname to an IP address and checks it against private, + loopback, link-local, and reserved IP ranges to prevent SSRF attacks. + + Arguments: + url: The URL to validate + + Raises: + ValueError: If the URL resolves to a private or reserved IP address + """ + parsed = urlparse(url) + hostname = parsed.hostname + + if not hostname: + raise ValueError(_('Invalid URL: no hostname')) + + try: + addrinfo = socket.getaddrinfo(hostname, None) + except socket.gaierror: + raise ValueError(_('Invalid URL: hostname could not be resolved')) + + for _family, _type, _proto, _canonname, sockaddr in addrinfo: + ip = ipaddress.ip_address(sockaddr[0]) + + if ip.is_private or ip.is_loopback or ip.is_link_local or ip.is_reserved: + raise ValueError(_('URL points to a private or reserved IP address')) + + def download_image_from_url(remote_url, timeout=2.5): """Download an image file from a remote URL. @@ -115,6 +147,9 @@ def download_image_from_url(remote_url, timeout=2.5): validator = URLValidator() validator(remote_url) + # SSRF protection: validate the resolved IP is not private/internal + validate_url_no_ssrf(remote_url) + # Calculate maximum allowable image size (in bytes) max_size = ( int(get_global_setting('INVENTREE_DOWNLOAD_IMAGE_MAX_SIZE')) * 1024 * 1024 @@ -129,10 +164,36 @@ def download_image_from_url(remote_url, timeout=2.5): response = requests.get( remote_url, timeout=timeout, - allow_redirects=True, + allow_redirects=False, stream=True, headers=headers, ) + + # Handle redirects manually to validate each destination + max_redirects = 5 + redirect_count = 0 + + while response.is_redirect and redirect_count < max_redirects: + redirect_url = response.headers.get('Location') + if not redirect_url: + break + + # Validate the redirect destination against SSRF + validator(redirect_url) + validate_url_no_ssrf(redirect_url) + + redirect_count += 1 + response = requests.get( + redirect_url, + timeout=timeout, + allow_redirects=False, + stream=True, + headers=headers, + ) + + if redirect_count >= max_redirects: + raise ValueError(_('Too many redirects')) + # Throw an error if anything goes wrong response.raise_for_status() except requests.exceptions.ConnectionError as exc: @@ -143,6 +204,8 @@ def download_image_from_url(remote_url, timeout=2.5): raise requests.exceptions.HTTPError( _('Server responded with invalid status code') + f': {response.status_code}' ) + except ValueError: + raise except Exception as exc: raise Exception(_('Exception occurred') + f': {exc!s}') @@ -288,6 +351,8 @@ def getModelsWithMixin(mixin_class) -> list: models_with_mixin = [ x for x in db_models if x is not None and issubclass(x, mixin_class) ] + # sort to make resulting list deterministic (and easier to test) + models_with_mixin.sort(key=lambda x: x._meta.label_lower) # Store the result in the session cache set_session_cache(cache_key, models_with_mixin) diff --git a/src/backend/InvenTree/InvenTree/logging.py b/src/backend/InvenTree/InvenTree/logging.py new file mode 100644 index 0000000000..e6d7b59226 --- /dev/null +++ b/src/backend/InvenTree/InvenTree/logging.py @@ -0,0 +1,17 @@ +"""Helpers for logging integrations.""" + +from django.dispatch import receiver + +import structlog +from django_structlog import signals + + +@receiver(signals.update_failure_response) +@receiver(signals.bind_extra_request_finished_metadata) +def add_request_id_to_response(response, logger, **kwargs): + """Add the request ID to the response header, so that it can be traced through logs. + + source: https://django-structlog.readthedocs.io/en/latest/how_tos.html#bind-request-id-to-response-s-header + """ + context = structlog.contextvars.get_merged_contextvars(logger) + response['X-InvenTree-ReqId'] = context['request_id'] diff --git a/src/backend/InvenTree/InvenTree/management/commands/list_apps.py b/src/backend/InvenTree/InvenTree/management/commands/list_apps.py new file mode 100644 index 0000000000..56db10e350 --- /dev/null +++ b/src/backend/InvenTree/InvenTree/management/commands/list_apps.py @@ -0,0 +1,29 @@ +"""Custom management command to list all installed apps. + +This is used to determine which apps are installed, +including any apps which are defined for plugins. +""" + +from django.core.management.base import BaseCommand + + +class Command(BaseCommand): + """List all installed apps.""" + + def handle(self, *args, **kwargs): + """List all installed apps. + + Note that this function outputs in a particular format, + which is expected by the calling code in tasks.py + """ + from django.apps import apps + + app_list = [] + + for app in apps.get_app_configs(): + app_list.append(app.name) + + app_list.sort() + + self.stdout.write(f'Installed Apps: {len(app_list)}') + self.stdout.write('>>> ' + ','.join(app_list) + ' <<<') diff --git a/src/backend/InvenTree/InvenTree/management/commands/migrate_icons.py b/src/backend/InvenTree/InvenTree/management/commands/migrate_icons.py index 1ff5e6fd62..ee8456fe4f 100644 --- a/src/backend/InvenTree/InvenTree/management/commands/migrate_icons.py +++ b/src/backend/InvenTree/InvenTree/management/commands/migrate_icons.py @@ -99,7 +99,7 @@ class Command(BaseCommand): if kwargs['include_items']: icons[icon]['items'].append({ 'model': model.__name__.lower(), - 'id': item.id, # type: ignore + 'id': item.id, }) self.stdout.write(f'Writing icon map for {len(icons.keys())} icons') diff --git a/src/backend/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py b/src/backend/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py index d4b133d5ab..3025f37eb6 100644 --- a/src/backend/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py +++ b/src/backend/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py @@ -3,8 +3,7 @@ - May be required after importing a new dataset, for example """ -import os - +from django.core.files.storage import default_storage from django.core.management.base import BaseCommand from django.db.utils import OperationalError, ProgrammingError @@ -35,7 +34,7 @@ class Command(BaseCommand): img_paths.append(x.path) if len(img_paths) > 0: - if all(os.path.exists(path) for path in img_paths): + if all(default_storage.exists(p) for p in img_paths): # All images exist - skip further work return diff --git a/src/backend/InvenTree/InvenTree/management/commands/wait_for_db.py b/src/backend/InvenTree/InvenTree/management/commands/wait_for_db.py index 68b33adfff..84fcb2ebff 100644 --- a/src/backend/InvenTree/InvenTree/management/commands/wait_for_db.py +++ b/src/backend/InvenTree/InvenTree/management/commands/wait_for_db.py @@ -13,25 +13,39 @@ class Command(BaseCommand): def handle(self, *args, **kwargs): """Wait till the database is ready.""" - self.stdout.write('Waiting for database...') - connected = False + verbose = int(kwargs.get('verbosity', 0)) > 0 + attempts = kwargs.get('attempts', 10) - while not connected: - time.sleep(2) + if verbose: + self.stdout.write('Waiting for database connection...') + self.stdout.flush() + + while not connected and attempts > 0: + attempts -= 1 try: connection.ensure_connection() connected = True - except OperationalError as e: - self.stdout.write(f'Could not connect to database: {e}') - except ImproperlyConfigured as e: - self.stdout.write(f'Improperly configured: {e}') + except (OperationalError, ImproperlyConfigured): + if verbose: + self.stdout.write('Database connection failed, retrying ...') + self.stdout.flush() else: if not connection.is_usable(): - self.stdout.write('Database configuration is not usable') + if verbose: + self.stdout.write('Database configuration is not usable') + self.stdout.flush() if connected: - self.stdout.write('Database connection successful!') + if verbose: + self.stdout.write('Database connection successful!') + self.stdout.flush() + else: + time.sleep(1) + + if not connected: + self.stderr.write('Failed to connect to database after multiple attempts') + self.stderr.flush() diff --git a/src/backend/InvenTree/InvenTree/metadata.py b/src/backend/InvenTree/InvenTree/metadata.py index c45c20e832..86cbc91229 100644 --- a/src/backend/InvenTree/InvenTree/metadata.py +++ b/src/backend/InvenTree/InvenTree/metadata.py @@ -5,7 +5,7 @@ from django.http import Http404 from django.urls import reverse import structlog -from rest_framework import exceptions, serializers +from rest_framework import exceptions, permissions, serializers from rest_framework.fields import empty from rest_framework.metadata import SimpleMetadata from rest_framework.request import clone_request @@ -131,10 +131,26 @@ class InvenTreeMetadata(SimpleMetadata): # Remove any HTTP methods that the user does not have permission for for method, permission in rolemap.items(): + # general model / role permission result = check_user_permission(user, self.model, permission) or ( role_required and check_user_role(user, role_required, permission) ) + # check if simple IsAuthenticated permission class is used + if not result: + result = ( + view.permission_classes + and len(view.permission_classes) == 1 + and any( + perm + in [ + permissions.IsAuthenticated, + InvenTree.permissions.IsAuthenticatedOrReadScope, + ] + for perm in view.permission_classes + ) + ) + if method in actions and not result: del actions[method] diff --git a/src/backend/InvenTree/InvenTree/middleware.py b/src/backend/InvenTree/InvenTree/middleware.py index efed42d59c..369d9c29a2 100644 --- a/src/backend/InvenTree/InvenTree/middleware.py +++ b/src/backend/InvenTree/InvenTree/middleware.py @@ -19,6 +19,11 @@ from error_report.middleware import ExceptionProcessor from common.settings import get_global_setting from InvenTree.cache import create_session_cache, delete_session_cache from InvenTree.config import CONFIG_LOOKUPS, inventreeInstaller +from InvenTree.version import ( + inventreeApiVersion, + inventreePythonVersion, + inventreeVersion, +) from users.models import ApiToken logger = structlog.get_logger('inventree') @@ -393,3 +398,15 @@ class InvenTreeHostSettingsMiddleware(MiddlewareMixin): # All checks passed return None + + +class InvenTreeVersionHeaderMiddleware(MiddlewareMixin): + """Middleware to add the InvenTree version header to all responses.""" + + def process_response(self, request, response): + """Add the InvenTree version header to the response.""" + response['X-InvenTree-Version'] = inventreeVersion() + response['X-InvenTree-API'] = inventreeApiVersion() + response['X-InvenTree-Python'] = inventreePythonVersion() + response['X-InvenTree-Installer'] = inventreeInstaller() + return response diff --git a/src/backend/InvenTree/InvenTree/mixins.py b/src/backend/InvenTree/InvenTree/mixins.py index 5dd51c30ca..5489404b10 100644 --- a/src/backend/InvenTree/InvenTree/mixins.py +++ b/src/backend/InvenTree/InvenTree/mixins.py @@ -19,7 +19,7 @@ from InvenTree.serializers import FilterableSerializerMixin class CleanMixin: - """Model mixin class which cleans inputs using the Mozilla bleach tools.""" + """Model mixin class which cleans inputs using nh3.""" # Define a list of field names which will *not* be cleaned SAFE_FIELDS = [] @@ -52,16 +52,7 @@ class CleanMixin: return Response(serializer.data) def clean_string(self, field: str, data: str) -> str: - """Clean / sanitize a single input string. - - Note that this function will *allow* orphaned <>& characters, - which would normally be escaped by bleach. - - Nominally, the only thing that will be "cleaned" will be HTML tags - - Ref: https://github.com/mozilla/bleach/issues/192 - - """ + """Clean / sanitize a single input string.""" cleaned = data # By default, newline characters are removed @@ -101,7 +92,7 @@ class CleanMixin: def clean_data(self, data: dict) -> dict: """Clean / sanitize data. - This uses Mozilla's bleach under the hood to disable certain html tags by + This uses nh3 under the hood to disable certain html tags by encoding them - this leads to script tags etc. to not work. The results can be longer then the input; might make some character combinations `ugly`. Prevents XSS on the server-level. diff --git a/src/backend/InvenTree/InvenTree/models.py b/src/backend/InvenTree/InvenTree/models.py index dcb22998ee..f0bb8dc11d 100644 --- a/src/backend/InvenTree/InvenTree/models.py +++ b/src/backend/InvenTree/InvenTree/models.py @@ -1410,32 +1410,22 @@ def after_failed_task(sender, instance: Task, created: bool, **kwargs): """Callback when a new task failure log is generated.""" from django.conf import settings + from InvenTree.exceptions import log_error + max_attempts = int(settings.Q_CLUSTER.get('max_attempts', 5)) n = instance.attempt_count # Only notify once the maximum number of attempts has been reached if not instance.success and n >= max_attempts: - try: - url = InvenTree.helpers_model.construct_absolute_url( - reverse( - 'admin:django_q_failure_change', kwargs={'object_id': instance.pk} - ) - ) - except (ValueError, NoReverseMatch): - url = '' + # Create a new Error object associated with this failed task + # This will, in turn, trigger a notification to staff users via the Error post_save signal - # Function name - f = instance.func - - notify_staff_users_of_error( - instance, - 'inventree.task_failure', - { - 'failure': instance, - 'name': _('Task Failure'), - 'message': _(f"Background worker task '{f}' failed after {n} attempts"), - 'link': url, - }, + log_error( + 'task_failure', + scope='worker', + error_name='Task Failure', + error_info=f"Task '{instance.pk}' failed after {n} attempts", + error_data=str(instance.result) if instance.result else '', ) @@ -1495,7 +1485,7 @@ class InvenTreeImageMixin(models.Model): def rename_image(self, filename): """Rename the uploaded image file using the IMAGE_RENAME function.""" - return self.IMAGE_RENAME(filename) # type: ignore + return self.IMAGE_RENAME(filename) image = StdImageField( upload_to=rename_image, diff --git a/src/backend/InvenTree/InvenTree/permissions.py b/src/backend/InvenTree/InvenTree/permissions.py index 07006870c5..47af7dabcc 100644 --- a/src/backend/InvenTree/InvenTree/permissions.py +++ b/src/backend/InvenTree/InvenTree/permissions.py @@ -376,7 +376,7 @@ def auth_exempt(view_func): def wrapped_view(*args, **kwargs): return view_func(*args, **kwargs) - wrapped_view.auth_exempt = True # type:ignore[unresolved-attribute] + wrapped_view.auth_exempt = True return wraps(view_func)(wrapped_view) diff --git a/src/backend/InvenTree/InvenTree/ready.py b/src/backend/InvenTree/InvenTree/ready.py index b696ff42fa..0a87e8d616 100644 --- a/src/backend/InvenTree/InvenTree/ready.py +++ b/src/backend/InvenTree/InvenTree/ready.py @@ -119,16 +119,29 @@ def isGeneratingSchema(): 'collectstatic', 'makemessages', 'wait_for_db', + 'list_apps', 'gunicorn', + 'sqlflush', 'qcluster', 'check', 'shell', + 'help', ] if any(cmd in sys.argv for cmd in excluded_commands): return False - if 'schema' in sys.argv: + included_commands = [ + 'schema', + 'spectactular', + # schema adjacent calls + 'export_settings_definitions', + 'export_tags', + 'export_filters', + 'export_report_context', + ] + + if any(cmd in sys.argv for cmd in included_commands): return True # This is a very inefficient call - so we only use it as a last resort @@ -175,11 +188,46 @@ def isInMainThread(): return not isInWorkerThread() +def readOnlyCommands(): + """Return a list of read-only management commands which should not trigger database writes.""" + return [ + 'help', + 'check', + 'shell', + 'sqlflush', + 'list_apps', + 'wait_for_db', + 'spectactular', + 'makemessages', + 'collectstatic', + 'showmigrations', + 'compilemessages', + ] + + +def isReadOnlyCommand(): + """Return True if the current command is a read-only command, which should not trigger any database writes.""" + if ( + isImportingData() + or isRunningMigrations() + or isRebuildingData() + or isRunningBackup() + ): + return True + + return any(cmd in sys.argv for cmd in readOnlyCommands()) + + def canAppAccessDatabase( allow_test: bool = False, allow_plugins: bool = False, allow_shell: bool = False ): """Returns True if the apps.py file can access database records. + Arguments: + allow_test: If True, override checks and allow database access during testing mode + allow_plugins: If True, override checks and allow database access during plugin loading + allow_shell: If True, override checks and allow database access during shell sessions + There are some circumstances where we don't want the ready function in apps.py to touch the database """ @@ -188,7 +236,7 @@ def canAppAccessDatabase( return False # Prevent database access if we are importing data - if isImportingData(): + if not allow_plugins and isImportingData(): return False # Prevent database access if we are rebuilding data @@ -202,13 +250,13 @@ def canAppAccessDatabase( # If any of the following management commands are being executed, # prevent custom "on load" code from running! excluded_commands = [ - 'check', - 'createsuperuser', - 'wait_for_db', - 'makemessages', 'compilemessages', - 'spectactular', + 'createsuperuser', 'collectstatic', + 'makemessages', + 'spectactular', + 'wait_for_db', + 'check', ] if not allow_shell: diff --git a/src/backend/InvenTree/InvenTree/sanitizer.py b/src/backend/InvenTree/InvenTree/sanitizer.py index ce093b96fe..55dbd24770 100644 --- a/src/backend/InvenTree/InvenTree/sanitizer.py +++ b/src/backend/InvenTree/InvenTree/sanitizer.py @@ -1,7 +1,66 @@ """Functions to sanitize user input files.""" -from bleach import clean -from bleach.css_sanitizer import CSSSanitizer +import nh3 + +# Allowed CSS properties for SVG sanitization (combines general CSS and SVG-specific properties) +_SVG_ALLOWED_CSS_PROPERTIES = frozenset([ + # General CSS (matching bleach's original ALLOWED_CSS_PROPERTIES) + 'azimuth', + 'background-color', + 'border-bottom-color', + 'border-collapse', + 'border-color', + 'border-left-color', + 'border-right-color', + 'border-top-color', + 'clear', + 'color', + 'cursor', + 'direction', + 'display', + 'elevation', + 'float', + 'font', + 'font-family', + 'font-size', + 'font-style', + 'font-variant', + 'font-weight', + 'height', + 'letter-spacing', + 'line-height', + 'overflow', + 'pause', + 'pause-after', + 'pause-before', + 'pitch', + 'pitch-range', + 'richness', + 'speak', + 'speak-header', + 'speak-numeral', + 'speak-punctuation', + 'speech-rate', + 'stress', + 'text-align', + 'text-decoration', + 'text-indent', + 'unicode-bidi', + 'vertical-align', + 'voice-family', + 'volume', + 'white-space', + 'width', + # SVG-specific CSS (matching bleach's ALLOWED_SVG_PROPERTIES) + 'fill', + 'fill-opacity', + 'fill-rule', + 'stroke', + 'stroke-linecap', + 'stroke-linejoin', + 'stroke-opacity', + 'stroke-width', +]) ALLOWED_ELEMENTS_SVG = [ 'a', @@ -184,6 +243,74 @@ ALLOWED_ATTRIBUTES_SVG = [ 'style', ] +# Default allowlists (matching bleach's original defaults) +# TODO: I do not see us needing a bunch of these but I do not want to introduce a breaking change; we might want to narroy this down with the next breaking change +DEFAULT_TAGS = frozenset([ + 'a', + 'abbr', + 'acronym', + 'b', + 'blockquote', + 'code', + 'em', + 'i', + 'li', + 'ol', + 'strong', + 'ul', +]) +DEAFAULT_ATTRS = {'a': {'href', 'title'}, 'abbr': {'title'}, 'acronym': {'title'}} +DEFAULT_CSS = frozenset([ + 'azimuth', + 'background-color', + 'border-bottom-color', + 'border-collapse', + 'border-color', + 'border-left-color', + 'border-right-color', + 'border-top-color', + 'clear', + 'color', + 'cursor', + 'direction', + 'display', + 'elevation', + 'float', + 'font', + 'font-family', + 'font-size', + 'font-style', + 'font-variant', + 'font-weight', + 'height', + 'letter-spacing', + 'line-height', + 'overflow', + 'pause', + 'pause-after', + 'pause-before', + 'pitch', + 'pitch-range', + 'richness', + 'speak', + 'speak-header', + 'speak-numeral', + 'speak-punctuation', + 'speech-rate', + 'stress', + 'text-align', + 'text-decoration', + 'text-indent', + 'unicode-bidi', + 'vertical-align', + 'voice-family', + 'volume', + 'white-space', + 'width', +]) +# TODO: We might want to respect the setting EXTRA_URL_SCHEMES here but that would be breaking +DEFAULT_PROTOCOLS = frozenset(['http', 'https', 'mailto']) + def sanitize_svg( file_data, @@ -206,13 +333,16 @@ def sanitize_svg( if isinstance(file_data, bytes): file_data = file_data.decode('utf-8') - cleaned = clean( + # nh3 requires attributes as dict[str, set[str]]; convert from list (allowed for all elements) + attrs_dict = {elem: set(attributes) for elem in elements} + + cleaned = nh3.clean( file_data, - tags=elements, - attributes=attributes, - strip=strip, + tags=set(elements), + attributes=attrs_dict, + filter_style_properties=_SVG_ALLOWED_CSS_PROPERTIES, strip_comments=strip, - css_sanitizer=CSSSanitizer(), + link_rel=None, ) return cleaned diff --git a/src/backend/InvenTree/InvenTree/serializers.py b/src/backend/InvenTree/InvenTree/serializers.py index 4bd226a574..5338fa714c 100644 --- a/src/backend/InvenTree/InvenTree/serializers.py +++ b/src/backend/InvenTree/InvenTree/serializers.py @@ -1,14 +1,13 @@ """Serializers used in various InvenTree apps.""" -import os from collections import OrderedDict from copy import deepcopy from decimal import Decimal from typing import Any, Optional -from django.conf import settings from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError as DjangoValidationError +from django.core.files.storage import default_storage from django.db import models from django.db.models import QuerySet from django.utils.translation import gettext_lazy as _ @@ -33,8 +32,6 @@ from InvenTree.fields import InvenTreeRestURLField, InvenTreeURLField from InvenTree.helpers import str2bool from InvenTree.helpers_model import getModelsWithMixin -from .setting.storages import StorageBackends - # region path filtering class FilterableSerializerField: @@ -689,9 +686,7 @@ class InvenTreeAttachmentSerializerField(serializers.FileField): if not value: return None - if settings.STORAGE_TARGET == StorageBackends.S3: - return str(value.url) - return os.path.join(str(settings.MEDIA_URL), str(value)) + return default_storage.url(str(value)) class InvenTreeImageSerializerField(serializers.ImageField): @@ -705,9 +700,7 @@ class InvenTreeImageSerializerField(serializers.ImageField): if not value: return None - if settings.STORAGE_TARGET == StorageBackends.S3: - return str(value.url) - return os.path.join(str(settings.MEDIA_URL), str(value)) + return default_storage.url(str(value)) class InvenTreeDecimalField(serializers.FloatField): diff --git a/src/backend/InvenTree/InvenTree/setting/db_backend.py b/src/backend/InvenTree/InvenTree/setting/db_backend.py new file mode 100644 index 0000000000..e90f01c8f9 --- /dev/null +++ b/src/backend/InvenTree/InvenTree/setting/db_backend.py @@ -0,0 +1,151 @@ +"""Configuration settings specific to a particular database backend.""" + +import structlog + +from InvenTree.config import get_boolean_setting, get_setting + +logger = structlog.get_logger('inventree') + + +def set_db_options(engine: str, db_options: dict): + """Update database options based on the specified database backend. + + Arguments: + engine: The database engine (e.g. 'sqlite3', 'postgresql', etc.) + db_options: The database options dictionary to update + """ + logger.debug('Setting database options: %s', engine) + + if 'postgres' in engine: + set_postgres_options(db_options) + elif 'mysql' in engine: + set_mysql_options(db_options) + elif 'sqlite' in engine: + set_sqlite_options(db_options) + else: + raise ValueError(f'Unknown database engine: {engine}') + + +def set_postgres_options(db_options: dict): + """Set database options specific to postgres backend.""" + from django.db.backends.postgresql.psycopg_any import IsolationLevel + + # Connection timeout + if 'connect_timeout' not in db_options: + # The DB server is in the same data center, it should not take very + # long to connect to the database server + # # seconds, 2 is minimum allowed by libpq + db_options['connect_timeout'] = int( + get_setting('INVENTREE_DB_TIMEOUT', 'database.timeout', 2) + ) + + # Setup TCP keepalive + # DB server is in the same DC, it should not become unresponsive for + # very long. With the defaults below we wait 5 seconds for the network + # issue to resolve itself. If that doesn't happen, whatever happened + # is probably fatal and no amount of waiting is going to fix it. + # # 0 - TCP Keepalives disabled; 1 - enabled + if 'keepalives' not in db_options: + db_options['keepalives'] = int( + get_setting('INVENTREE_DB_TCP_KEEPALIVES', 'database.tcp_keepalives', 1) + ) + + # Seconds after connection is idle to send keep alive + if 'keepalives_idle' not in db_options: + db_options['keepalives_idle'] = int( + get_setting( + 'INVENTREE_DB_TCP_KEEPALIVES_IDLE', 'database.tcp_keepalives_idle', 1 + ) + ) + + # Seconds after missing ACK to send another keep alive + if 'keepalives_interval' not in db_options: + db_options['keepalives_interval'] = int( + get_setting( + 'INVENTREE_DB_TCP_KEEPALIVES_INTERVAL', + 'database.tcp_keepalives_interval', + '1', + ) + ) + + # Number of missing ACKs before we close the connection + if 'keepalives_count' not in db_options: + db_options['keepalives_count'] = int( + get_setting( + 'INVENTREE_DB_TCP_KEEPALIVES_COUNT', + 'database.tcp_keepalives_count', + '5', + ) + ) + + # # Milliseconds for how long pending data should remain unacked + # by the remote server + # TODO: Supported starting in PSQL 11 + # "tcp_user_timeout": int(os.getenv("PGTCP_USER_TIMEOUT", "1000"), + + # Postgres's default isolation level is Read Committed which is + # normally fine, but most developers think the database server is + # actually going to do Serializable type checks on the queries to + # protect against simultaneous changes. + # https://www.postgresql.org/docs/devel/transaction-iso.html + # https://docs.djangoproject.com/en/3.2/ref/databases/#isolation-level + if 'isolation_level' not in db_options: + serializable = get_boolean_setting( + 'INVENTREE_DB_ISOLATION_SERIALIZABLE', 'database.serializable', False + ) + db_options['isolation_level'] = ( + IsolationLevel.SERIALIZABLE + if serializable + else IsolationLevel.READ_COMMITTED + ) + + +def set_mysql_options(db_options: dict): + """Set database options specific to mysql backend.""" + # TODO TCP time outs and keepalives + + # MariaDB's default isolation level is Repeatable Read which is + # normally fine, but most developers think the database server is + # actually going to Serializable type checks on the queries to + # protect against simultaneous changes. + # https://mariadb.com/kb/en/mariadb-transactions-and-isolation-levels-for-sql-server-users/#changing-the-isolation-level + # https://docs.djangoproject.com/en/3.2/ref/databases/#mysql-isolation-level + if 'isolation_level' not in db_options: + serializable = get_boolean_setting( + 'INVENTREE_DB_ISOLATION_SERIALIZABLE', 'database.serializable', False + ) + db_options['isolation_level'] = ( + 'serializable' if serializable else 'read committed' + ) + + +def set_sqlite_options(db_options: dict): + """Set database options specific to sqlite backend. + + References: + - https://docs.djangoproject.com/en/5.0/ref/databases/#sqlite-notes + - https://docs.djangoproject.com/en/6.0/ref/databases/#database-is-locked-errors + """ + import InvenTree.ready + + # Specify minimum timeout behavior for SQLite connections + if 'timeout' not in db_options: + db_options['timeout'] = int( + get_setting('INVENTREE_DB_TIMEOUT', 'database.timeout', 10) + ) + + # Specify the transaction mode for the database + # For the backend worker thread, IMMEDIATE mode is used, + # it has been determined to provide better protection against database locks in the worker thread + db_options['transaction_mode'] = ( + 'IMMEDIATE' if InvenTree.ready.isInWorkerThread() else 'DEFERRED' + ) + + # SQLite's default isolation level is Serializable due to SQLite's + # single writer implementation. Presumably as a result of this, it is + # not possible to implement any lower isolation levels in SQLite. + # https://www.sqlite.org/isolation.html + + if get_boolean_setting('INVENTREE_DB_WAL_MODE', 'database.wal_mode', True): + # Specify that we want to use Write-Ahead Logging (WAL) mode for SQLite databases, as this allows for better concurrency and performance + db_options['init_command'] = 'PRAGMA journal_mode=WAL;' diff --git a/src/backend/InvenTree/InvenTree/settings.py b/src/backend/InvenTree/InvenTree/settings.py index 0d8831f365..444919d6b8 100644 --- a/src/backend/InvenTree/InvenTree/settings.py +++ b/src/backend/InvenTree/InvenTree/settings.py @@ -33,7 +33,7 @@ from InvenTree.version import checkMinPythonVersion, inventreeCommitHash from users.oauth2_scopes import oauth2_scopes from . import config -from .setting import locales, markdown, spectacular, storages +from .setting import db_backend, locales, markdown, spectacular, storages try: import django_stubs_ext @@ -194,10 +194,18 @@ PLUGINS_MANDATORY = get_setting( 'INVENTREE_PLUGINS_MANDATORY', 'plugins_mandatory', typecast=list, default_value=[] ) +if PLUGINS_MANDATORY: + logger.info('Mandatory plugins: %s', PLUGINS_MANDATORY) + PLUGINS_INSTALL_DISABLED = get_boolean_setting( 'INVENTREE_PLUGIN_NOINSTALL', 'plugin_noinstall', False ) +if not PLUGINS_ENABLED: + PLUGINS_INSTALL_DISABLED = ( + True # If plugins are disabled, also disable installation + ) + PLUGIN_FILE = config.get_plugin_file() # Plugin test settings @@ -372,6 +380,7 @@ MIDDLEWARE = CONFIG.get( 'InvenTree.middleware.InvenTreeRequestCacheMiddleware', # Request caching 'InvenTree.middleware.InvenTreeHostSettingsMiddleware', # Ensuring correct hosting/security settings 'django_structlog.middlewares.RequestMiddleware', # Structured logging + 'InvenTree.middleware.InvenTreeVersionHeaderMiddleware', ], ) @@ -483,7 +492,7 @@ if LDAP_AUTH: # pragma: no cover ) AUTH_LDAP_USER_SEARCH = django_auth_ldap.config.LDAPSearch( get_setting('INVENTREE_LDAP_SEARCH_BASE_DN', 'ldap.search_base_dn'), - ldap.SCOPE_SUBTREE, # type: ignore[unresolved-attribute] + ldap.SCOPE_SUBTREE, str( get_setting( 'INVENTREE_LDAP_SEARCH_FILTER_STR', @@ -519,7 +528,7 @@ if LDAP_AUTH: # pragma: no cover ) AUTH_LDAP_GROUP_SEARCH = django_auth_ldap.config.LDAPSearch( get_setting('INVENTREE_LDAP_GROUP_SEARCH', 'ldap.group_search'), - ldap.SCOPE_SUBTREE, # type: ignore[unresolved-attribute] + ldap.SCOPE_SUBTREE, f'(objectClass={AUTH_LDAP_GROUP_OBJECT_CLASS})', ) AUTH_LDAP_GROUP_TYPE_CLASS = get_setting( @@ -720,108 +729,8 @@ db_options = db_config.get('OPTIONS', db_config.get('options')) if db_options is None: db_options = {} -# Specific options for postgres backend -if 'postgres' in DB_ENGINE: # pragma: no cover - from django.db.backends.postgresql.psycopg_any import ( # type: ignore[unresolved-import] - IsolationLevel, - ) - - # Connection timeout - if 'connect_timeout' not in db_options: - # The DB server is in the same data center, it should not take very - # long to connect to the database server - # # seconds, 2 is minimum allowed by libpq - db_options['connect_timeout'] = int( - get_setting('INVENTREE_DB_TIMEOUT', 'database.timeout', 2) - ) - - # Setup TCP keepalive - # DB server is in the same DC, it should not become unresponsive for - # very long. With the defaults below we wait 5 seconds for the network - # issue to resolve itself. It it that doesn't happen whatever happened - # is probably fatal and no amount of waiting is going to fix it. - # # 0 - TCP Keepalives disabled; 1 - enabled - if 'keepalives' not in db_options: - db_options['keepalives'] = int( - get_setting('INVENTREE_DB_TCP_KEEPALIVES', 'database.tcp_keepalives', 1) - ) - - # Seconds after connection is idle to send keep alive - if 'keepalives_idle' not in db_options: - db_options['keepalives_idle'] = int( - get_setting( - 'INVENTREE_DB_TCP_KEEPALIVES_IDLE', 'database.tcp_keepalives_idle', 1 - ) - ) - - # Seconds after missing ACK to send another keep alive - if 'keepalives_interval' not in db_options: - db_options['keepalives_interval'] = int( - get_setting( - 'INVENTREE_DB_TCP_KEEPALIVES_INTERVAL', - 'database.tcp_keepalives_internal', - '1', - ) - ) - - # Number of missing ACKs before we close the connection - if 'keepalives_count' not in db_options: - db_options['keepalives_count'] = int( - get_setting( - 'INVENTREE_DB_TCP_KEEPALIVES_COUNT', - 'database.tcp_keepalives_count', - '5', - ) - ) - - # # Milliseconds for how long pending data should remain unacked - # by the remote server - # TODO: Supported starting in PSQL 11 - # "tcp_user_timeout": int(os.getenv("PGTCP_USER_TIMEOUT", "1000"), - - # Postgres's default isolation level is Read Committed which is - # normally fine, but most developers think the database server is - # actually going to do Serializable type checks on the queries to - # protect against simultaneous changes. - # https://www.postgresql.org/docs/devel/transaction-iso.html - # https://docs.djangoproject.com/en/3.2/ref/databases/#isolation-level - if 'isolation_level' not in db_options: - serializable = get_boolean_setting( - 'INVENTREE_DB_ISOLATION_SERIALIZABLE', 'database.serializable', False - ) - db_options['isolation_level'] = ( - IsolationLevel.SERIALIZABLE - if serializable - else IsolationLevel.READ_COMMITTED - ) - -# Specific options for MySql / MariaDB backend -elif 'mysql' in DB_ENGINE: # pragma: no cover - # TODO TCP time outs and keepalives - - # MariaDB's default isolation level is Repeatable Read which is - # normally fine, but most developers think the database server is - # actually going to Serializable type checks on the queries to - # protect against siumltaneous changes. - # https://mariadb.com/kb/en/mariadb-transactions-and-isolation-levels-for-sql-server-users/#changing-the-isolation-level - # https://docs.djangoproject.com/en/3.2/ref/databases/#mysql-isolation-level - if 'isolation_level' not in db_options: - serializable = get_boolean_setting( - 'INVENTREE_DB_ISOLATION_SERIALIZABLE', 'database.serializable', False - ) - db_options['isolation_level'] = ( - 'serializable' if serializable else 'read committed' - ) - -# Specific options for sqlite backend -elif 'sqlite' in DB_ENGINE: - # TODO: Verify timeouts are not an issue because no network is involved for SQLite - - # SQLite's default isolation level is Serializable due to SQLite's - # single writer implementation. Presumably as a result of this, it is - # not possible to implement any lower isolation levels in SQLite. - # https://www.sqlite.org/isolation.html - pass +# Set database-specific options +db_backend.set_db_options(DB_ENGINE, db_options) # Provide OPTIONS dict back to the database configuration dict db_config['OPTIONS'] = db_options @@ -930,10 +839,15 @@ GLOBAL_CACHE_ENABLED = is_global_cache_enabled() CACHES = {'default': get_cache_config(GLOBAL_CACHE_ENABLED)} -_q_worker_timeout = int( +BACKGROUND_WORKER_TIMEOUT = int( get_setting('INVENTREE_BACKGROUND_TIMEOUT', 'background.timeout', 90) ) +# Set the retry time for background workers to be slightly longer than the worker timeout, to ensure that workers have time to timeout before being retried +BACKGROUND_WORKER_RETRY = max( + int(get_setting('INVENTREE_BACKGROUND_RETRY', 'background.retry', 300)), + BACKGROUND_WORKER_TIMEOUT + 120, +) # Prevent running multiple background workers if global cache is disabled # This is to prevent scheduling conflicts due to the lack of a shared cache @@ -943,22 +857,39 @@ BACKGROUND_WORKER_COUNT = ( else 1 ) +# If running with SQLite, limit background worker threads to 1 to prevent database locking issues +if 'sqlite' in DB_ENGINE: + BACKGROUND_WORKER_COUNT = 1 + +BACKGROUND_WORKER_ATTEMPTS = int( + get_setting('INVENTREE_BACKGROUND_MAX_ATTEMPTS', 'background.max_attempts', 5) +) + +# Check if '--sync' was passed in the command line +if '--sync' in sys.argv and '--noreload' in sys.argv and DEBUG: + SYNC_TASKS = True +else: + SYNC_TASKS = False + +# Clean up sys.argv so Django doesn't complain about an unknown argument +if SYNC_TASKS: + sys.argv.remove('--sync') + # django-q background worker configuration Q_CLUSTER = { 'name': 'InvenTree', 'label': 'Background Tasks', 'workers': BACKGROUND_WORKER_COUNT, - 'timeout': _q_worker_timeout, - 'retry': max(120, _q_worker_timeout + 30), - 'max_attempts': int( - get_setting('INVENTREE_BACKGROUND_MAX_ATTEMPTS', 'background.max_attempts', 5) - ), + 'timeout': BACKGROUND_WORKER_TIMEOUT, + 'retry': BACKGROUND_WORKER_RETRY, + 'max_attempts': BACKGROUND_WORKER_ATTEMPTS, + 'save_limit': 1000, 'queue_limit': 50, 'catch_up': False, 'bulk': 10, 'orm': 'default', 'cache': 'default', - 'sync': False, + 'sync': SYNC_TASKS, 'poll': 1.5, } diff --git a/src/backend/InvenTree/InvenTree/sso.py b/src/backend/InvenTree/InvenTree/sso.py index 05bacaf38d..d04abf21ba 100644 --- a/src/backend/InvenTree/InvenTree/sso.py +++ b/src/backend/InvenTree/InvenTree/sso.py @@ -49,7 +49,7 @@ def check_provider(provider): if not app: return False - if allauth.app_settings.SITES_ENABLED: # type: ignore[unresolved-attribute] + if allauth.app_settings.SITES_ENABLED: # At least one matching site must be specified if not app.sites.exists(): logger.error('SocialApp %s has no sites configured', app) diff --git a/src/backend/InvenTree/InvenTree/tasks.py b/src/backend/InvenTree/InvenTree/tasks.py index 887c11899d..973f967086 100644 --- a/src/backend/InvenTree/InvenTree/tasks.py +++ b/src/backend/InvenTree/InvenTree/tasks.py @@ -159,15 +159,71 @@ def record_task_success(task_name: str): set_global_setting(f'_{task_name}_SUCCESS', datetime.now().isoformat(), None) +def check_existing_task(taskname, group: str, *args, **kwargs) -> Optional[str]: + """Test if an identical task is already registered with the worker. + + This will only return true if the task name, group, args and kwargs all match an existing task. + + Arguments: + taskname: The name of the task to check for, in the format 'app.module.function' + group: The group that the task belongs to + *args: Positional arguments to match + **kwargs: Keyword arguments to match + + Returns: + Optional[str]: The ID of the matching task, if found, otherwise None + """ + from django_q.models import OrmQ + + task_id = None + + # Iterate through all available tasks, with the most recent first + for task in OrmQ.objects.all().order_by('-id'): + if task.func() != taskname and task.task['func'] != taskname: + # Task does not match + continue + + if task.group() != group: + # Group does not match + continue + + if task.args() != args: + # Task args do not match + continue + + if task.kwargs() != kwargs: + # Task kwargs do not match + continue + + task_id = task.task_id() + + break + + return task_id + + def offload_task( - taskname, *args, force_async=False, force_sync=False, **kwargs -) -> bool: + taskname, + *args, + force_async: bool = False, + force_sync: bool = False, + check_duplicates: bool = True, + **kwargs, +) -> str | bool: """Create an AsyncTask if workers are running. This is different to a 'scheduled' task, in that it only runs once! If workers are not running or force_sync flag, is set then the task is ran synchronously. + Arguments: + taskname: The name of the task to be run, in the format 'app.module.function' + *args: Positional arguments to be passed to the task function + force_async: If True, force the task to be offloaded (even if workers are not running) + force_sync: If True, force the task to be run synchronously (even if workers are running) + check_duplicates: If True, check for existing identical tasks before offloading + **kwargs: Keyword arguments to be passed to the task function + Returns: - bool: True if the task was offloaded (or ran), False otherwise + str | bool: Task ID if the task was offloaded, True if ran synchronously, False otherwise """ from InvenTree.exceptions import log_error @@ -198,11 +254,23 @@ def offload_task( force_sync = True if force_async or (is_worker_running() and not force_sync): + # Before offloading, check if a duplicate task exists + if not force_sync and check_duplicates: + if task_id := check_existing_task(taskname, group, *args, **kwargs): + logger.debug( + "Skipping duplicate task '%s' with ID '%s'", taskname, task_id + ) + + return task_id + # Running as asynchronous task try: task = AsyncTask(taskname, *args, group=group, **kwargs) with tracer.start_as_current_span(f'async worker: {taskname}'): task.run() + + # Return the ID of the offloaded task, so that it can be tracked if needed + return task.id except ImportError: raise_warning(f"WARNING: '{taskname}' not offloaded - Function not found") return False @@ -265,6 +333,40 @@ def offload_task( return True +def get_queued_task(task_id: str): + """Find the task in the queue, if it exists. + + Note that the OrmQ table does NOT keep the task ID as a database field, + it is instead stored in the payload data. + If there are a large number of pending tasks, this query may be inefficient, + but there is no other way to find a queued task by ID. + """ + offset = 0 + limit = 500 + + if not task_id: + # Return early if no task ID was provided + return None + + task_id = str(task_id) + + from django_q.models import OrmQ + + while True: + queued_tasks = OrmQ.objects.all().order_by('id')[offset : offset + limit] + if not queued_tasks: + break + + for task in queued_tasks: + if task.task_id() == task_id: + return task + + offset += limit + + # No matching task was discovered + return None + + @dataclass() class ScheduledTask: """A scheduled task. @@ -286,7 +388,7 @@ class ScheduledTask: QUARTERLY: str = 'Q' YEARLY: str = 'Y' - TYPE: tuple[str] = (MINUTES, HOURLY, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY) # type: ignore[invalid-assignment] + TYPE: tuple[str] = (MINUTES, HOURLY, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY) class TaskRegister: diff --git a/src/backend/InvenTree/InvenTree/test_api.py b/src/backend/InvenTree/InvenTree/test_api.py index 7aeacb6751..5475edd03a 100644 --- a/src/backend/InvenTree/InvenTree/test_api.py +++ b/src/backend/InvenTree/InvenTree/test_api.py @@ -278,8 +278,7 @@ class BulkDeleteTests(InvenTreeAPITestCase): response = self.delete(url, {}, expected_code=400) self.assertIn( - 'List of items or filters must be provided for bulk operation', - str(response.data), + 'List of items must be provided for bulk operation', str(response.data) ) # DELETE with invalid 'items' @@ -287,11 +286,6 @@ class BulkDeleteTests(InvenTreeAPITestCase): self.assertIn('Items must be provided as a list', str(response.data)) - # DELETE with invalid 'filters' - response = self.delete(url, {'filters': [1, 2, 3]}, expected_code=400) - - self.assertIn('Filters must be provided as a dict', str(response.data)) - class SearchTests(InvenTreeAPITestCase): """Unit tests for global search endpoint.""" @@ -574,7 +568,7 @@ class GeneralApiTests(InvenTreeAPITestCase): self.assertIn('License file not found at', str(log.output)) - with TemporaryDirectory() as tmp: # type: ignore[no-matching-overload] + with TemporaryDirectory() as tmp: sample_file = Path(tmp, 'temp.txt') sample_file.write_text('abc', 'utf-8') diff --git a/src/backend/InvenTree/InvenTree/test_tasks.py b/src/backend/InvenTree/InvenTree/test_tasks.py index f169292711..04df009198 100644 --- a/src/backend/InvenTree/InvenTree/test_tasks.py +++ b/src/backend/InvenTree/InvenTree/test_tasks.py @@ -10,7 +10,7 @@ from django.db.utils import NotSupportedError from django.test import TestCase from django.utils import timezone -from django_q.models import Schedule, Task +from django_q.models import OrmQ, Schedule, Task from error_report.models import Error import InvenTree.tasks @@ -234,11 +234,8 @@ class InvenTreeTaskTests(PluginRegistryMixin, TestCase): msg = NotificationMessage.objects.last() - self.assertEqual(msg.name, 'Task Failure') - self.assertEqual( - msg.message, - "Background worker task 'InvenTree.tasks.failed_task' failed after 10 attempts", - ) + self.assertEqual(msg.name, 'Server Error') + self.assertEqual(msg.message, 'An error has been logged by the server.') def test_delete_old_emails(self): """Test the delete_old_emails task.""" @@ -297,3 +294,74 @@ class InvenTreeTaskTests(PluginRegistryMixin, TestCase): ) msg.timestamp = timestamp msg.save() + + def test_duplicate_tasks(self): + """Test for task duplication.""" + # Start with a blank slate + OrmQ.objects.all().delete() + + # Add some unique tasks + for idx in range(10): + InvenTree.tasks.offload_task( + f'dummy_module.dummy_function_{idx}', force_async=True + ) + + self.assertEqual(OrmQ.objects.count(), 10) + + # Add some duplicate tasks + for _idx in range(10): + InvenTree.tasks.offload_task( + 'dummy_module.dummy_function_x', + 1, + 2, + 3, + animal='cat', + vegetable='carrot', + force_async=True, + ) + + # Only 1 extra task should have been added + self.assertEqual(OrmQ.objects.count(), 11) + + # Add some more duplicate tasks, but ignore duplication checks + for _idx in range(10): + InvenTree.tasks.offload_task( + 'dummy_module.dummy_function_y', + 1, + 2, + 3, + animal='dog', + vegetable='yam', + force_async=True, + check_duplicates=False, + ) + + # 10 extra tasks should have been added + self.assertEqual(OrmQ.objects.count(), 21) + + # Add more tasks, which are *not* duplicates based on args + for idx in range(10): + InvenTree.tasks.offload_task( + 'dummy_module.dummy_function', + 1, + idx, + 3, + animal='cat', + vegetable='carrot', + force_async=True, + ) + + # Add more tasks, which are *not* duplicates based on kwargs + for idx in range(10): + InvenTree.tasks.offload_task( + 'dummy_module.dummy_function', + 1, + 2, + 3, + animal='cat', + vegetable=f'vegetable_{idx}', + force_async=True, + ) + + # 20 more tasks should have been added + self.assertEqual(OrmQ.objects.count(), 41) diff --git a/src/backend/InvenTree/InvenTree/tests.py b/src/backend/InvenTree/InvenTree/tests.py index a28aad7313..5a303d264d 100644 --- a/src/backend/InvenTree/InvenTree/tests.py +++ b/src/backend/InvenTree/InvenTree/tests.py @@ -692,23 +692,26 @@ class TestHelpers(TestCase): self.assertFalse(helpers.isNull(s)) def testStaticUrl(self): - """Test static url helpers.""" + """Test static URL helpers.""" self.assertEqual(helpers.getStaticUrl('test.jpg'), '/static/test.jpg') self.assertEqual(helpers.getBlankImage(), '/static/img/blank_image.png') self.assertEqual( helpers.getBlankThumbnail(), '/static/img/blank_image.thumbnail.png' ) + self.assertFalse(helpers.checkStaticFile('dummy', 'dir', 'test.jpg')) + self.assertTrue(helpers.checkStaticFile('img', 'blank_image.png')) + def testMediaUrl(self): """Test getMediaUrl.""" # Str should not work with self.assertRaises(TypeError): - helpers.getMediaUrl('xx/yy.png') # type: ignore + helpers.getMediaUrl('xx/yy.png') # Correct usage part = Part().image self.assertEqual( - helpers.getMediaUrl(StdImageFieldFile(part, part, 'xx/yy.png')), # type: ignore + helpers.getMediaUrl(StdImageFieldFile(part, part, 'xx/yy.png')), # ty:ignore[too-many-positional-arguments] '/media/xx/yy.png', ) @@ -1604,11 +1607,11 @@ class SanitizerTest(TestCase): def test_svg_sanitizer(self): """Test that SVGs are sanitized accordingly.""" valid_string = """{0} - + """ dangerous_string = valid_string.format('') - # Test that valid string + # Test that valid string passes through unchanged self.assertEqual(valid_string, sanitize_svg(valid_string)) # Test that invalid string is cleaned diff --git a/src/backend/InvenTree/InvenTree/tracing.py b/src/backend/InvenTree/InvenTree/tracing.py index 4cedbb584d..f97da6c0eb 100644 --- a/src/backend/InvenTree/InvenTree/tracing.py +++ b/src/backend/InvenTree/InvenTree/tracing.py @@ -4,7 +4,7 @@ import base64 import logging from typing import Optional -from opentelemetry import metrics, trace # type: ignore[import] +from opentelemetry import metrics, trace from opentelemetry.instrumentation.django import DjangoInstrumentor from opentelemetry.instrumentation.redis import RedisInstrumentor from opentelemetry.instrumentation.requests import RequestsInstrumentor diff --git a/src/backend/InvenTree/InvenTree/urls.py b/src/backend/InvenTree/InvenTree/urls.py index 2820606347..01da5ace8d 100644 --- a/src/backend/InvenTree/InvenTree/urls.py +++ b/src/backend/InvenTree/InvenTree/urls.py @@ -20,6 +20,7 @@ import build.api import common.api import company.api import importer.api +import InvenTree.logging # noqa: F401 - ensure logging handlers are registered import machine.api import order.api import part.api diff --git a/src/backend/InvenTree/InvenTree/version.py b/src/backend/InvenTree/InvenTree/version.py index b66f834e06..2f77ab765b 100644 --- a/src/backend/InvenTree/InvenTree/version.py +++ b/src/backend/InvenTree/InvenTree/version.py @@ -289,8 +289,10 @@ def inventreeBranch(): return ' '.join(branch.splitlines()) if main_branch is None: - return None - return main_branch.decode('utf-8') + return None # pragma: no cover - branch information may not be available in all environments + return main_branch.decode( + 'utf-8' + ) # pragma: no cover - branch information may not be available in all environments def inventreeTarget(): diff --git a/src/backend/InvenTree/build/api.py b/src/backend/InvenTree/build/api.py index e94590e67f..232b7adca7 100644 --- a/src/backend/InvenTree/build/api.py +++ b/src/backend/InvenTree/build/api.py @@ -11,12 +11,13 @@ import django_filters.rest_framework.filters as rest_filters from django_filters.rest_framework.filterset import FilterSet from drf_spectacular.utils import extend_schema, extend_schema_field from rest_framework import serializers, status -from rest_framework.exceptions import ValidationError +from rest_framework.exceptions import NotFound, ValidationError from rest_framework.response import Response import build.models as build_models import build.serializers import common.models +import common.serializers import part.models as part_models import stock.models as stock_models import stock.serializers @@ -145,8 +146,8 @@ class BuildFilter(FilterSet): def filter_overdue(self, queryset, name, value): """Filter the queryset to either include or exclude orders which are overdue.""" if str2bool(value): - return queryset.filter(Build.OVERDUE_FILTER) - return queryset.exclude(Build.OVERDUE_FILTER) + return queryset.filter(Build.get_overdue_filter()) + return queryset.exclude(Build.get_overdue_filter()) assigned_to_me = rest_filters.BooleanFilter( label=_('Assigned to me'), method='filter_assigned_to_me' @@ -662,6 +663,13 @@ class BuildLineDetail(BuildLineMixin, OutputOptionsMixin, RetrieveUpdateDestroyA class BuildOrderContextMixin: """Mixin class which adds build order as serializer context variable.""" + def get_build(self): + """Return the Build object associated with this API endpoint.""" + try: + return Build.objects.get(pk=self.kwargs.get('pk', None)) + except (ValueError, Build.DoesNotExist): + raise NotFound(_('Build not found')) + def get_serializer_context(self): """Add extra context information to the endpoint serializer.""" ctx = super().get_serializer_context() @@ -670,8 +678,8 @@ class BuildOrderContextMixin: ctx['to_complete'] = True try: - ctx['build'] = Build.objects.get(pk=self.kwargs.get('pk', None)) - except Exception: + ctx['build'] = self.get_build() + except NotFound: pass return ctx @@ -764,6 +772,37 @@ class BuildAutoAllocate(BuildOrderContextMixin, CreateAPI): queryset = Build.objects.none() serializer_class = build.serializers.BuildAutoAllocationSerializer + @extend_schema(responses={200: common.serializers.TaskDetailSerializer}) + def post(self, *args, **kwargs): + """Override the POST method to handle auto allocation task. + + As this is offloaded to the background task, + we return information about the background task which is performing the auto allocation operation. + """ + from build.tasks import auto_allocate_build + from InvenTree.tasks import offload_task + + build = self.get_build() + serializer = self.get_serializer(data=self.request.data) + serializer.is_valid(raise_exception=True) + data = serializer.validated_data + + # Offload the task to the background worker + task_id = offload_task( + auto_allocate_build, + build.pk, + location=data.get('location', None), + exclude_location=data.get('exclude_location', None), + interchangeable=data['interchangeable'], + substitutes=data['substitutes'], + optional_items=data['optional_items'], + item_type=data.get('item_type', 'untracked'), + group='build', + ) + + response = common.serializers.TaskDetailSerializer.from_task(task_id).data + return Response(response, status=response['http_status']) + class BuildAllocate(BuildOrderContextMixin, CreateAPI): """API endpoint to allocate stock items to a build order. @@ -786,6 +825,39 @@ class BuildConsume(BuildOrderContextMixin, CreateAPI): queryset = Build.objects.none() serializer_class = build.serializers.BuildConsumeSerializer + @extend_schema(responses={200: common.serializers.TaskDetailSerializer}) + def post(self, *args, **kwargs): + """Override the POST method to handle consume task. + + As this is offloaded to the background task, + we return information about the background task which is performing the consume operation. + """ + from build.tasks import consume_build_stock + from InvenTree.tasks import offload_task + + build = self.get_build() + serializer = self.get_serializer(data=self.request.data) + serializer.is_valid(raise_exception=True) + data = serializer.validated_data + + # Extract the information we need to consume build stock + items = data.get('items', []) + lines = data.get('lines', []) + notes = data.get('notes', '') + + # Offload the task to the background worker + task_id = offload_task( + consume_build_stock, + build.pk, + lines=[line['build_line'].pk for line in lines], + items={item['build_item'].pk: item['quantity'] for item in items}, + user_id=self.request.user.pk, + notes=notes, + ) + + response = common.serializers.TaskDetailSerializer.from_task(task_id).data + return Response(response, status=response['http_status']) + class BuildIssue(BuildOrderContextMixin, CreateAPI): """API endpoint for issuing a BuildOrder.""" diff --git a/src/backend/InvenTree/build/models.py b/src/backend/InvenTree/build/models.py index 1662088163..39018c661a 100644 --- a/src/backend/InvenTree/build/models.py +++ b/src/backend/InvenTree/build/models.py @@ -1,7 +1,7 @@ """Build database model definitions.""" import decimal -from typing import Optional +from typing import Optional, TypedDict from django.contrib.auth.models import User from django.core.exceptions import ValidationError @@ -50,7 +50,7 @@ from stock.status_codes import StockHistoryCode, StockStatus logger = structlog.get_logger('inventree') -class BuildReportContext(report.mixins.BaseReportContext): +class BuildReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the Build model. Attributes: @@ -132,11 +132,14 @@ class Build( TRACKED = 'tracked' # Tracked BOM items UNTRACKED = 'untracked' # Untracked BOM items - OVERDUE_FILTER = ( - Q(status__in=BuildStatusGroups.ACTIVE_CODES) - & ~Q(target_date=None) - & Q(target_date__lte=InvenTree.helpers.current_date()) - ) + @classmethod + def get_overdue_filter(cls): + """Filter for determining if a build order is overdue.""" + return ( + Q(status__in=BuildStatusGroups.ACTIVE_CODES) + & ~Q(target_date=None) + & Q(target_date__lte=InvenTree.helpers.current_date()) + ) # Global setting for specifying reference pattern REFERENCE_PATTERN_SETTING = 'BUILDORDER_REFERENCE_PATTERN' @@ -465,7 +468,7 @@ class Build( bool: Is the build overdue """ query = Build.objects.filter(pk=self.pk) - query = query.filter(Build.OVERDUE_FILTER) + query = query.filter(Build.get_overdue_filter()) return query.exists() @@ -1036,7 +1039,7 @@ class Build( lines = lines.exclude(bom_item__consumable=True) lines = lines.annotate(allocated=annotate_allocated_quantity()) - for build_line in lines: # type: ignore[non-iterable] + for build_line in lines: reduce_by = build_line.allocated - build_line.quantity if reduce_by <= 0: @@ -1509,10 +1512,10 @@ class Build( unallocated_quantity -= quantity except (ValidationError, serializers.ValidationError) as exc: - # Catch model errors and re-throw as DRF errors + # Re-raise with a Django-compatible validation payload raise ValidationError( - exc.message, detail=serializers.as_serializer_error(exc) - ) + serializers.as_serializer_error(exc) + ) from exc if unallocated_quantity <= 0: # We have now fully-allocated this BomItem - no need to continue! @@ -1692,7 +1695,7 @@ def after_save_build(sender, instance: Build, created: bool, **kwargs): instance.update_build_line_items() -class BuildLineReportContext(report.mixins.BaseReportContext): +class BuildLineReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the BuildLine model. Attributes: @@ -1742,6 +1745,7 @@ class BuildLine(report.mixins.InvenTreeReportMixin, InvenTree.models.InvenTreeMo """Return the API URL used to access this model.""" return reverse('api-build-line-list') + # type def report_context(self) -> BuildLineReportContext: """Generate custom report context for this BuildLine object.""" return { diff --git a/src/backend/InvenTree/build/serializers.py b/src/backend/InvenTree/build/serializers.py index db4fd7560b..1e1f3c6860 100644 --- a/src/backend/InvenTree/build/serializers.py +++ b/src/backend/InvenTree/build/serializers.py @@ -21,7 +21,6 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from rest_framework.serializers import ValidationError -import build.tasks import common.filters import common.settings import company.serializers @@ -38,7 +37,6 @@ from InvenTree.serializers import ( NotesFieldMixin, enable_filter, ) -from InvenTree.tasks import offload_task from stock.generators import generate_batch_code from stock.models import StockItem, StockLocation from stock.serializers import ( @@ -51,7 +49,6 @@ from users.serializers import OwnerSerializer, UserSerializer from .models import Build, BuildItem, BuildLine from .status_codes import BuildStatus -from .tasks import consume_build_item, consume_build_line class BuildSerializer( @@ -168,7 +165,8 @@ class BuildSerializer( queryset = queryset.annotate( overdue=Case( When( - Build.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()) + Build.get_overdue_filter(), + then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()), ) @@ -1128,27 +1126,6 @@ class BuildAutoAllocationSerializer(serializers.Serializer): help_text=_('Select item type to auto-allocate'), ) - def save(self): - """Perform the auto-allocation step.""" - import InvenTree.tasks - - data = self.validated_data - - build_order = self.context['build'] - - if not InvenTree.tasks.offload_task( - build.tasks.auto_allocate_build, - build_order.pk, - location=data.get('location', None), - exclude_location=data.get('exclude_location', None), - interchangeable=data['interchangeable'], - substitutes=data['substitutes'], - optional_items=data['optional_items'], - item_type=data.get('item_type', 'untracked'), - group='build', - ): - raise ValidationError(_('Failed to start auto-allocation task')) - class BuildItemSerializer( FilterableSerializerMixin, DataImportExportSerializerMixin, InvenTreeModelSerializer @@ -1846,46 +1823,3 @@ class BuildConsumeSerializer(serializers.Serializer): raise ValidationError(_('At least one item or line must be provided')) return data - - @transaction.atomic - def save(self): - """Perform the stock consumption step.""" - data = self.validated_data - request = self.context.get('request') - notes = data.get('notes', '') - - # We may be passed either a list of BuildItem or BuildLine instances - items = data.get('items', []) - lines = data.get('lines', []) - - with transaction.atomic(): - # Process the provided BuildItem objects - for item in items: - build_item = item['build_item'] - quantity = item['quantity'] - - if build_item.install_into: - # If the build item is tracked into an output, we do not consume now - # Instead, it gets consumed when the output is completed - continue - - # Offload a background task to consume this BuildItem - offload_task( - consume_build_item, - build_item.pk, - quantity, - notes=notes, - user_id=request.user.pk if request else None, - ) - - # Process the provided BuildLine objects - for line in lines: - build_line = line['build_line'] - - # Offload a background task to consume this BuildLine - offload_task( - consume_build_line, - build_line.pk, - notes=notes, - user_id=request.user.pk if request else None, - ) diff --git a/src/backend/InvenTree/build/tasks.py b/src/backend/InvenTree/build/tasks.py index fd8e3da1de..363dac3e19 100644 --- a/src/backend/InvenTree/build/tasks.py +++ b/src/backend/InvenTree/build/tasks.py @@ -2,8 +2,10 @@ from datetime import timedelta from decimal import Decimal +from typing import Optional from django.contrib.auth.models import User +from django.db import transaction from django.utils.translation import gettext_lazy as _ import structlog @@ -27,61 +29,53 @@ def auto_allocate_build(build_id: int, **kwargs): """Run auto-allocation for a specified BuildOrder.""" from build.models import Build - build_order = Build.objects.filter(pk=build_id).first() - - if not build_order: - logger.warning( - 'Could not auto-allocate BuildOrder <%s> - BuildOrder does not exist', - build_id, - ) - return - + build_order = Build.objects.get(pk=build_id) build_order.auto_allocate_stock(**kwargs) -@tracer.start_as_current_span('consume_build_item') -def consume_build_item( - item_id: str, quantity, notes: str = '', user_id: int | None = None +@tracer.start_as_current_span('consume_build_stock') +def consume_build_stock( + build_id: int, + lines: Optional[list[int]] = None, + items: Optional[dict] = None, + user_id: int | None = None, + **kwargs, ): - """Consume stock against a particular BuildOrderLineItem allocation.""" - from build.models import BuildItem + """Consume stock for the specified BuildOrder. - item = BuildItem.objects.filter(pk=item_id).first() + Arguments: + build_id: The ID of the BuildOrder to consume stock for + lines: Optional list of BuildLine IDs to consume + items: Optional dict of BuildItem IDs (and quantities)to consume + user_id: The ID of the user who initiated the stock consumption + """ + from build.models import Build, BuildItem, BuildLine - if not item: - logger.warning( - 'Could not consume stock for BuildItem <%s> - BuildItem does not exist', - item_id, - ) - return + build = Build.objects.get(pk=build_id) + user = User.objects.filter(pk=user_id).first() if user_id else None - item.complete_allocation( - quantity=quantity, - notes=notes, - user=User.objects.filter(pk=user_id).first() if user_id else None, - ) + lines = lines or [] + items = items or {} + notes = kwargs.pop('notes', '') + # Extract the relevant BuildLine and BuildItem objects + with transaction.atomic(): + # Consume each of the specified BuildLine objects + for line_id in lines: + if build_line := BuildLine.objects.filter(pk=line_id, build=build).first(): + for item in build_line.allocations.all(): + item.complete_allocation( + quantity=item.quantity, notes=notes, user=user + ) -@tracer.start_as_current_span('consume_build_line') -def consume_build_line(line_id: int, notes: str = '', user_id: int | None = None): - """Consume stock against a particular BuildOrderLineItem.""" - from build.models import BuildLine - - line_item = BuildLine.objects.filter(pk=line_id).first() - - if not line_item: - logger.warning( - 'Could not consume stock for LineItem <%s> - LineItem does not exist', - line_id, - ) - return - - for item in line_item.allocations.all(): - item.complete_allocation( - quantity=item.quantity, - notes=notes, - user=User.objects.filter(pk=user_id).first() if user_id else None, - ) + # Consume each of the specified BuildItem objects + for item_id, quantity in items.items(): + if build_item := BuildItem.objects.filter( + pk=item_id, build_line__build=build + ).first(): + build_item.complete_allocation( + quantity=quantity, notes=notes, user=user + ) @tracer.start_as_current_span('complete_build_allocations') @@ -89,7 +83,7 @@ def complete_build_allocations(build_id: int, user_id: int): """Complete build allocations for a specified BuildOrder.""" from build.models import Build - build_order = Build.objects.filter(pk=build_id).first() + build_order = Build.objects.get(pk=build_id) if user_id: try: @@ -103,13 +97,6 @@ def complete_build_allocations(build_id: int, user_id: int): else: user = None - if not build_order: - logger.warning( - 'Could not complete build allocations for BuildOrder <%s> - BuildOrder does not exist', - build_id, - ) - return - build_order.complete_allocations(user) diff --git a/src/backend/InvenTree/build/test_api.py b/src/backend/InvenTree/build/test_api.py index 7dacc2ed85..26fdaf201e 100644 --- a/src/backend/InvenTree/build/test_api.py +++ b/src/backend/InvenTree/build/test_api.py @@ -970,12 +970,12 @@ class BuildAllocationTest(BuildAPITest): url = reverse('api-build-auto-allocate', kwargs={'pk': build.pk}) # Allocate only 'untracked' items - this should not allocate our tracked item - self.post(url, data={'item_type': 'untracked'}) + self.post(url, data={'item_type': 'untracked'}, expected_code=200) self.assertEqual(N, BuildItem.objects.count()) # Allocate 'tracked' items - this should allocate our tracked item - self.post(url, data={'item_type': 'tracked'}) + self.post(url, data={'item_type': 'tracked'}, expected_code=200) # A new BuildItem should have been created self.assertEqual(N + 1, BuildItem.objects.count()) @@ -1564,12 +1564,13 @@ class BuildLineTests(BuildAPITest): # Filter by 'available' status # Note: The max_query_time is bumped up here, as postgresql backend has some strange issues (only during testing) - response = self.get(url, data={'available': True}, max_query_time=15) + # TODO: This needs to be addressed in the future, as 25 seconds is an unacceptably long time for a query to take in testing + response = self.get(url, data={'available': True}, max_query_time=25) n_t = len(response.data) self.assertGreater(n_t, 0) # Note: The max_query_time is bumped up here, as postgresql backend has some strange issues (only during testing) - response = self.get(url, data={'available': False}, max_query_time=15) + response = self.get(url, data={'available': False}, max_query_time=25) n_f = len(response.data) self.assertGreater(n_f, 0) @@ -1735,7 +1736,7 @@ class BuildConsumeTest(BuildAPITest): 'lines': [{'build_line': line.pk} for line in self.build.build_lines.all()] } - self.post(url, data, expected_code=201) + self.post(url, data, expected_code=200) self.assertEqual(self.build.allocated_stock.count(), 0) self.assertEqual(self.build.consumed_stock.count(), 3) @@ -1758,7 +1759,7 @@ class BuildConsumeTest(BuildAPITest): ] } - self.post(url, data, expected_code=201) + self.post(url, data, expected_code=200) self.assertEqual(self.build.allocated_stock.count(), 0) self.assertEqual(self.build.consumed_stock.count(), 3) diff --git a/src/backend/InvenTree/common/admin.py b/src/backend/InvenTree/common/admin.py index a5461b7d02..5703423afc 100644 --- a/src/backend/InvenTree/common/admin.py +++ b/src/backend/InvenTree/common/admin.py @@ -32,6 +32,24 @@ class ParameterAdmin(admin.ModelAdmin): search_fields = ('template__name', 'data', 'note') +class SelectionListEntryInlineAdmin(admin.StackedInline): + """Inline admin class for the SelectionListEntry model.""" + + model = common.models.SelectionListEntry + extra = 0 + + +@admin.register(common.models.SelectionList) +class SelectionListAdmin(admin.ModelAdmin): + """Admin interface for SelectionList objects.""" + + list_display = ('name', 'description', 'active', 'locked') + search_fields = ('name', 'description') + list_filter = ('active', 'locked') + + inlines = [SelectionListEntryInlineAdmin] + + @admin.register(common.models.Attachment) class AttachmentAdmin(admin.ModelAdmin): """Admin interface for Attachment objects.""" diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index 3b6cc14de5..63b75ddf52 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -17,8 +17,8 @@ from django.views.decorators.csrf import csrf_exempt import django_filters.rest_framework.filters as rest_filters import django_q.models +import django_q.tasks from django_filters.rest_framework.filterset import FilterSet -from django_q.tasks import async_task from djmoney.contrib.exchange.models import ExchangeBackend, Rate from drf_spectacular.utils import OpenApiResponse, extend_schema from error_report.models import Error @@ -115,7 +115,7 @@ class WebhookView(CsrfExemptMixin, APIView): # process data message = self.webhook.save_data(payload, headers, request) if self.run_async: - async_task(self._process_payload, message.id) + django_q.tasks.async_task(self._process_payload, message.id) else: self._process_result( self.webhook.process_payload(message, payload, headers), message @@ -564,13 +564,29 @@ class ErrorMessageDetail(RetrieveUpdateDestroyAPI): permission_classes = [IsAuthenticatedOrReadScope, IsAdminUser] +class BackgroundTaskDetail(APIView): + """Detail view for a single background task.""" + + permission_classes = [IsAuthenticatedOrReadScope] + + @extend_schema(responses={200: common.serializers.TaskDetailSerializer}) + def get(self, request, task_id, *args, **kwargs): + """Fetch information regarding a particular background task ID.""" + response = common.serializers.TaskDetailSerializer.from_task(task_id).data + + return Response(response, status=response['http_status']) + + class BackgroundTaskOverview(APIView): """Provides an overview of the background task queue status.""" permission_classes = [IsAuthenticatedOrReadScope, IsAdminUser] serializer_class = None - @extend_schema(responses={200: common.serializers.TaskOverviewSerializer}) + @extend_schema( + operation_id='background_task_overview', + responses={200: common.serializers.TaskOverviewSerializer}, + ) def get(self, request, fmt=None): """Return information about the current status of the background task queue.""" import django_q.models as q_models @@ -608,7 +624,7 @@ class ScheduledTaskList(ListAPI): ordering_fields = ['pk', 'func', 'last_run', 'next_run'] - search_fields = ['func'] + search_fields = ['func', 'name'] def get_queryset(self): """Return annotated queryset.""" @@ -1150,6 +1166,14 @@ class EntryMixin: class SelectionEntryList(EntryMixin, ListCreateAPI): """List view for SelectionEntry objects.""" + filter_backends = SEARCH_ORDER_FILTER + + ordering_fields = ['list', 'label', 'active'] + + search_fields = ['label', 'description'] + + filterset_fields = ['active', 'value', 'list'] + class SelectionEntryDetail(EntryMixin, RetrieveUpdateDestroyAPI): """Detail view for a SelectionEntry object.""" @@ -1162,6 +1186,22 @@ class DataOutputEndpointMixin: serializer_class = common.serializers.DataOutputSerializer permission_classes = [IsAuthenticatedOrReadScope] + def get_queryset(self): + """Return the set of DataOutput objects which the user has permission to view.""" + queryset = super().get_queryset() + + try: + user = self.request.user + except AttributeError: + raise PermissionDenied('User information is not available') + + # Allow staff users access to all DataOutput objects + if user.is_staff: + return queryset + + # All other users are limited to viewing their own DataOutput objects + return queryset.filter(user=user) + class DataOutputList(DataOutputEndpointMixin, BulkDeleteMixin, ListAPI): """List view for DataOutput objects.""" @@ -1396,6 +1436,9 @@ common_api_urls = [ name='api-scheduled-task-list', ), path('failed/', FailedTaskList.as_view(), name='api-failed-task-list'), + path( + '/', BackgroundTaskDetail.as_view(), name='api-task-detail' + ), path('', BackgroundTaskOverview.as_view(), name='api-task-overview'), ]), ), diff --git a/src/backend/InvenTree/common/currency.py b/src/backend/InvenTree/common/currency.py index 87d9f59faa..adb3b55cff 100644 --- a/src/backend/InvenTree/common/currency.py +++ b/src/backend/InvenTree/common/currency.py @@ -230,6 +230,6 @@ def get_price( quantity = decimal.Decimal(f'{quantity}') if pb_found: - cost = pb_cost * quantity + cost = decimal.Decimal(pb_cost) * quantity return InvenTree.helpers.normalize(cost + instance.base_cost) return None diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index a2246343a4..2cb7e33104 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -10,6 +10,7 @@ import json import math import os import uuid +from collections import OrderedDict from datetime import timedelta, timezone from email.utils import make_msgid from enum import Enum @@ -85,8 +86,8 @@ class RenderMeta(enums.ChoicesType): return [] -class RenderChoices(models.TextChoices, metaclass=RenderMeta): # type: ignore - """Class for creating enumerated string choices for schema rendering.""" +class RenderChoices(models.TextChoices, metaclass=RenderMeta): + """Class for creating enumerated string choices for schema rendering.""" # ty:ignore[conflicting-metaclass] class MetaMixin(models.Model): @@ -363,9 +364,15 @@ class BaseInvenTreeSetting(models.Model): # Specify any "default" values which are not in the database settings_definition = settings_definition or cls.SETTINGS + + all_settings = OrderedDict() + for key, setting in settings_definition.items(): - if key.upper() not in settings: - settings[key.upper()] = cls( + # If the setting is already in the database, use that value + if key.upper() in settings: + all_settings[key] = settings[key.upper()] + else: + all_settings[key.upper()] = cls( key=key.upper(), value=cls.get_setting_default(key, **filters), **filters, @@ -373,10 +380,10 @@ class BaseInvenTreeSetting(models.Model): # remove any hidden settings if exclude_hidden and setting.get('hidden', False): - del settings[key.upper()] + del all_settings[key.upper()] # format settings values and remove protected - for key, setting in settings.items(): + for key, setting in all_settings.items(): validator = cls.get_setting_validator(key, **filters) if cls.is_protected(key, **filters) and setting.value != '': @@ -389,7 +396,7 @@ class BaseInvenTreeSetting(models.Model): except ValueError: setting.value = cls.get_setting_default(key, **filters) - return settings + return all_settings @classmethod def allValues( @@ -1084,7 +1091,7 @@ class BaseInvenTreeSetting(models.Model): return self.__class__.validator_is_bool(validator) - def as_bool(self): + def as_bool(self) -> bool: """Return the value of this setting converted to a boolean value. Warning: Only use on values where is_bool evaluates to true! @@ -2313,11 +2320,39 @@ class SelectionList(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeMo """Return the API URL associated with the SelectionList model.""" return reverse('api-selectionlist-list') - def get_choices(self): - """Return the choices for the selection list.""" - choices = self.entries.filter(active=True) + def get_choices(self, active: Optional[bool] = True): + """Return the choices for the selection list. + + Arguments: + active: If specified, filter choices by active status + + Returns: + List of choice values for this selection list + """ + choices = self.entries.all() + + if active is not None: + choices = choices.filter(active=active) + return [c.value for c in choices] + def has_choice(self, value: str, active: Optional[bool] = None): + """Check if the selection list has a particular choice. + + Arguments: + value: The value to check for + active: If specified, filter choices by active status + + Returns: + True if the choice exists in the selection list, False otherwise + """ + choices = self.entries.all() + + if active is not None: + choices = choices.filter(active=active) + + return choices.filter(value=value).exists() + class SelectionListEntry(models.Model): """Class which represents a single entry in a SelectionList. diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index ae4278a3d1..574c45f265 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -42,7 +42,7 @@ class SettingsValueField(serializers.Field): """Return the object instance, not the attribute value.""" return instance - def to_representation(self, instance: common_models.InvenTreeSetting) -> str: + def to_representation(self, instance: common_models.InvenTreeSetting): """Return the value of the setting. Protected settings are returned as '***' @@ -381,7 +381,7 @@ class ConfigSerializer(serializers.Serializer): """Return the configuration data as a dictionary.""" if not isinstance(instance, str): instance = list(instance.keys())[0] - return {'key': instance, **self.instance[instance]} + return {'key': instance, **self.instance.get(instance)} class NotesImageSerializer(InvenTreeModelSerializer): @@ -457,7 +457,7 @@ class FlagSerializer(serializers.Serializer): data = {'key': instance, 'state': flag_state(instance, request=request)} if request and request.user.is_superuser: - data['conditions'] = self.instance[instance] + data['conditions'] = self.instance.get(instance) return data @@ -522,6 +522,78 @@ class ErrorMessageSerializer(InvenTreeModelSerializer): read_only_fields = ['when', 'info', 'data', 'path', 'pk'] +class TaskDetailSerializer(serializers.Serializer): + """Serializer for a background task detail.""" + + task_id = serializers.CharField(read_only=True) + exists = serializers.BooleanField(read_only=True) + pending = serializers.BooleanField(read_only=True) + complete = serializers.BooleanField(read_only=True) + success = serializers.BooleanField(read_only=True) + http_status = serializers.IntegerField(read_only=True) + + @classmethod + def from_task(cls, task_id: str | bool | None) -> 'TaskDetailSerializer': + """Create a TaskDetailSerializer instance from a django_q Task. + + Arguments: + task_id: The ID of the task to retrieve details for. + + Returns: + An instance of TaskDetailSerializer with the task details. + + Notes: + - If the provided task_id is None, the task has not been run, or has errored out + - If the provided task_id is a boolean, the task has been run synchronously, and the boolean value indicates success or failure + - If the provided task_id is a string, the task has been offloaded to the background worker, and the details can be from the database + + """ + from InvenTree.tasks import get_queued_task + + if task_id is None or type(task_id) is bool: + # If the task_id is a boolean, the task has been run synchronously + return cls({ + 'task_id': '', + 'exists': False, + 'pending': False, + 'complete': task_id is not None, + 'success': False if task_id is None else bool(task_id), + 'http_status': 404 if task_id is None else 200, + }) + + # A non-boolean result indicates that the task has been offloaded to the background worker + success = django_q.models.Success.objects.filter(id=task_id).first() + failure = django_q.models.Failure.objects.filter(id=task_id).first() + task = ( + success + or failure + or django_q.models.Task.objects.filter(id=task_id).first() + ) + queued = False + + exists = bool(success or failure or task) + + if not exists: + # If the task has not been started yet, it may be present in the queue + queued = bool(get_queued_task(task_id)) + + complete = bool(success) or bool(failure) + + # Determine the http_status code for the task + # - 200: Task exists and has been completed + # - 404: Task does not exist + http_status = 200 if exists or queued else 404 + + return cls({ + 'task_id': task_id, + 'exists': exists or queued, + 'pending': queued, + 'complete': complete, + 'success': bool(success), + 'http_status': http_status, + }) + + class TaskOverviewSerializer(serializers.Serializer): """Serializer for background task overview.""" diff --git a/src/backend/InvenTree/common/setting/system.py b/src/backend/InvenTree/common/setting/system.py index 00fb35a558..bfab416a80 100644 --- a/src/backend/InvenTree/common/setting/system.py +++ b/src/backend/InvenTree/common/setting/system.py @@ -49,7 +49,8 @@ def validate_part_name_format(value): }) # Attempt to render the template with a dummy Part instance - p = Part(name='test part', description='some test part') + # Use pk=1 to ensure conditional checks like {% if part.pk %} are evaluated + p = Part(pk=1, name='test part', description='some test part') try: SandboxedEnvironment().from_string(value).render({'part': p}) @@ -234,6 +235,18 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'validator': bool, 'default': False, }, + 'INVENTREE_SHOW_SUPERUSER_BANNER': { + 'name': _('Show superuser banner'), + 'description': _('Show a warning banner in the UI when logged in as superuser'), + 'validator': bool, + 'default': True, + }, + 'INVENTREE_SHOW_ADMIN_BANNER': { + 'name': _('Show admin banner'), + 'description': _('Show a warning banner in the UI when logged in as admin'), + 'validator': bool, + 'default': False, + }, 'INVENTREE_COMPANY_NAME': { 'name': _('Company name'), 'description': _('Internal company name'), diff --git a/src/backend/InvenTree/common/setting/type.py b/src/backend/InvenTree/common/setting/type.py index 1971533663..0e788c017f 100644 --- a/src/backend/InvenTree/common/setting/type.py +++ b/src/backend/InvenTree/common/setting/type.py @@ -26,6 +26,7 @@ class SettingsKeyType(TypedDict, total=False): validator: Validation function/list of functions for the setting (optional, default: None, e.g: bool, int, str, MinValueValidator, ...) default: Default value or function that returns default value (optional) choices: Function that returns or value of list[tuple[str: key, str: display value]] (optional) + model_filters: Filters to apply when querying the associated model (optional) hidden: Hide this setting from settings page (optional) before_save: Function that gets called after save with *args, **kwargs (optional) after_save: Function that gets called after save with *args, **kwargs (optional) @@ -42,6 +43,7 @@ class SettingsKeyType(TypedDict, total=False): validator: Callable | list[Callable] | tuple[Callable] default: Callable | Any choices: list[tuple[str, str]] | Callable[[], list[tuple[str, str]]] + model_filters: dict[str, Any] hidden: bool before_save: Callable[..., None] after_save: Callable[..., None] diff --git a/src/backend/InvenTree/common/settings.py b/src/backend/InvenTree/common/settings.py index 79cda8ca50..0bccd1b1ec 100644 --- a/src/backend/InvenTree/common/settings.py +++ b/src/backend/InvenTree/common/settings.py @@ -28,6 +28,7 @@ def global_setting_overrides() -> dict: def get_global_setting(key, backup_value=None, environment_key=None, **kwargs): """Return the value of a global setting using the provided key.""" + import InvenTree.ready from common.models import InvenTreeSetting if environment_key: @@ -38,6 +39,10 @@ def get_global_setting(key, backup_value=None, environment_key=None, **kwargs): if backup_value is not None: kwargs['backup_value'] = backup_value + # Prevent database writes if we are in a read-only command + if InvenTree.ready.isReadOnlyCommand(): + kwargs['create'] = False + return InvenTreeSetting.get_setting(key, **kwargs) @@ -53,6 +58,12 @@ def set_global_setting(key, value, change_user=None, create=True, **kwargs): kwargs['change_user'] = change_user kwargs['create'] = create + if get_global_setting(key, create=False, cache=False) == value: + logger.debug( + f'Global setting "{key}" already has the desired value, no update needed' + ) + return True + return InvenTreeSetting.set_setting(key, value, **kwargs) diff --git a/src/backend/InvenTree/common/test_api.py b/src/backend/InvenTree/common/test_api.py index aba7e70afe..1feffb0b6f 100644 --- a/src/backend/InvenTree/common/test_api.py +++ b/src/backend/InvenTree/common/test_api.py @@ -6,6 +6,44 @@ import common.models from InvenTree.unit_test import InvenTreeAPITestCase +class DataOutputAPITests(InvenTreeAPITestCase): + """API tests for the DataOutput endpoint.""" + + roles = 'all' + + def setUp(self): + """Set up some test data for DataOutput API testing.""" + from report.models import DataOutput + + super().setUp() + + for ii in range(5): + DataOutput.objects.create( + output_type='test_output', + user=self.user if ii % 2 == 0 else None, + complete=ii % 2 == 1, + ) + + def test_data_output_list(self): + """Test the DataOutput API list endpoint.""" + url = reverse('api-data-output-list') + + # Non-staff user should only see outputs which are either enabled for all users, or created by themselves + self.user.is_staff = False + self.user.save() + response = self.get(url) + self.assertEqual(len(response.data), 3) + + for output in response.data: + self.assertEqual(output['user'], self.user.pk) + + # Set staff access = True, so we should see all outputs + self.user.is_staff = True + self.user.save() + response = self.get(url) + self.assertEqual(len(response.data), 5) + + class ParameterAPITests(InvenTreeAPITestCase): """Tests for the Parameter API.""" diff --git a/src/backend/InvenTree/common/tests.py b/src/backend/InvenTree/common/tests.py index 7df489209a..a0e5bb198f 100644 --- a/src/backend/InvenTree/common/tests.py +++ b/src/backend/InvenTree/common/tests.py @@ -1107,6 +1107,41 @@ class TaskListApiTests(InvenTreeAPITestCase): for task in response.data: self.assertEqual(task['name'], 'time.sleep') + def test_task_detail(self): + """Test the BackgroundTaskDetail API endpoint.""" + from InvenTree.tasks import offload_task + + # Force run a task + result = offload_task('fake_module.test_task', force_sync=True) + self.assertFalse(result) + self.assertEqual(type(result), bool) + + # Schedule a dummy task - and ensure it offloads to the worker + task_id = offload_task('fake_module.test_task', force_async=True) + self.assertIsNotNone(task_id) + self.assertEqual(type(task_id), str) + + url = reverse('api-task-detail', kwargs={'task_id': task_id}) + + data = self.get(url, expected_code=200).data + + self.assertEqual(data['task_id'], task_id) + self.assertTrue(data['exists']) + self.assertTrue(data['pending']) + self.assertFalse(data['complete']) + self.assertFalse(data['success']) + + # Perform a lookup for a non-existent task + url = reverse('api-task-detail', kwargs={'task_id': 'doesnotexist'}) + + data = self.get(url, expected_code=404).data + + self.assertEqual(data['task_id'], 'doesnotexist') + self.assertFalse(data['exists']) + self.assertFalse(data['pending']) + self.assertFalse(data['complete']) + self.assertFalse(data['success']) + class WebhookMessageTests(TestCase): """Tests for webhooks.""" @@ -1317,12 +1352,18 @@ class NotificationTest(InvenTreeAPITestCase): # Now, let's bulk delete all 'unread' notifications via the API, # but only associated with the logged in user - response = self.delete(url, {'filters': {'read': False}}, expected_code=200) + read_notifications = NotificationMessage.objects.filter(read=True) + response = self.delete( + url, {'items': [ntf.pk for ntf in read_notifications]}, expected_code=200 + ) - # Only 7 notifications should have been deleted, + # Only 3 notifications should have been deleted, # as the notifications associated with other users must remain untouched - self.assertEqual(NotificationMessage.objects.count(), 13) - self.assertEqual(NotificationMessage.objects.filter(user=self.user).count(), 3) + self.assertEqual(NotificationMessage.objects.count(), 17) + self.assertEqual(NotificationMessage.objects.filter(user=self.user).count(), 7) + self.assertEqual( + NotificationMessage.objects.filter(user=self.user, read=True).count(), 0 + ) def test_simple(self): """Test that a simple notification can be created.""" @@ -1534,9 +1575,14 @@ class CurrencyAPITests(InvenTreeAPITestCase): # Updating via the external exchange may not work every time for _idx in range(5): - self.post( - reverse('api-currency-refresh'), expected_code=200, max_query_time=30 - ) + try: + self.post( + reverse('api-currency-refresh'), + expected_code=200, + max_query_time=30, + ) + except Exception: + continue # There should be some new exchange rate objects now if Rate.objects.all().exists(): diff --git a/src/backend/InvenTree/company/api.py b/src/backend/InvenTree/company/api.py index 9ce3eaf27c..feaca0a354 100644 --- a/src/backend/InvenTree/company/api.py +++ b/src/backend/InvenTree/company/api.py @@ -184,6 +184,7 @@ class ManufacturerPartMixin(SerializerContextMixin): class ManufacturerPartList( + DataExportViewMixin, ManufacturerPartMixin, SerializerContextMixin, OutputOptionsMixin, diff --git a/src/backend/InvenTree/company/models.py b/src/backend/InvenTree/company/models.py index 90aeb23ae8..431f7ae11b 100644 --- a/src/backend/InvenTree/company/models.py +++ b/src/backend/InvenTree/company/models.py @@ -2,6 +2,7 @@ import os from decimal import Decimal +from typing import TypedDict from django.apps import apps from django.conf import settings @@ -53,7 +54,7 @@ def rename_company_image(instance, filename): return os.path.join(base, fn) -class CompanyReportContext(report.mixins.BaseReportContext): +class CompanyReportContext(report.mixins.BaseReportContext, TypedDict): """Report context for the Company model. Attributes: @@ -243,7 +244,11 @@ class Company( # We may have a pre-fetched primary address list if hasattr(self, 'primary_address_list'): addresses = self.primary_address_list - return addresses[0] if len(addresses) > 0 else None + return ( + addresses[0] + if len(addresses) > 0 and isinstance(addresses, list) + else None + ) # Otherwise, query the database return self.addresses.filter(primary=True).first() diff --git a/src/backend/InvenTree/generic/states/fields.py b/src/backend/InvenTree/generic/states/fields.py index 9ffa81d8eb..0ca677b4ab 100644 --- a/src/backend/InvenTree/generic/states/fields.py +++ b/src/backend/InvenTree/generic/states/fields.py @@ -194,7 +194,7 @@ class InvenTreeCustomStatusSerializerMixin: """Ensure the custom field is updated if the leader was changed.""" self.gather_custom_fields() # Mirror values from leader to follower - for field in self._custom_fields_leader: + for field in self._custom_fields_leader or []: follower_field_name = f'{field}_custom_key' if ( field in self.initial_data @@ -205,7 +205,7 @@ class InvenTreeCustomStatusSerializerMixin: setattr(self.instance, follower_field_name, self.initial_data[field]) # Mirror values from follower to leader - for field in self._custom_fields_follower: + for field in self._custom_fields_follower or []: leader_field_name = field.replace('_custom_key', '') if field in validated_data and leader_field_name not in self.initial_data: try: @@ -276,7 +276,7 @@ class InvenTreeCustomStatusSerializerMixin: # Inherit choices from leader self.gather_custom_fields() - if field_name in self._custom_fields: + if self._custom_fields and field_name in self._custom_fields: leader_field_name = field_name.replace('_custom_key', '') leader_field = self.fields[leader_field_name] if hasattr(leader_field, 'choices'): diff --git a/src/backend/InvenTree/importer/api.py b/src/backend/InvenTree/importer/api.py index 5d3fd6a748..c64f71c654 100644 --- a/src/backend/InvenTree/importer/api.py +++ b/src/backend/InvenTree/importer/api.py @@ -73,6 +73,22 @@ class DataImportSessionMixin: serializer_class = importer.serializers.DataImportSessionSerializer permission_classes = [InvenTree.permissions.DataImporterPermission] + def get_queryset(self): + """Return the set of DataImportSession objects that the user has permission to view.""" + queryset = super().get_queryset() + + try: + user = self.request.user + except AttributeError: + raise PermissionDenied('User information is not available') + + # Allow staff users access to all DataImportSession objects + if user.is_staff: + return queryset + + # For non-staff users, only allow access to sessions that they have created + return queryset.filter(user=user) + class DataImportSessionList(BulkDeleteMixin, DataImportSessionMixin, ListCreateAPI): """API endpoint for accessing a list of DataImportSession objects.""" diff --git a/src/backend/InvenTree/importer/mixins.py b/src/backend/InvenTree/importer/mixins.py index 1a36982ed6..969f82afa2 100644 --- a/src/backend/InvenTree/importer/mixins.py +++ b/src/backend/InvenTree/importer/mixins.py @@ -24,11 +24,11 @@ class DataImportSerializerMixin: Determine if the serializer is being used for data import, and if so, adjust the serializer fields accordingly. """ - importing = kwargs.pop('importing', False) + self._is_importing = kwargs.pop('importing', False) super().__init__(*args, **kwargs) - if importing: + if self._is_importing: # Exclude any fields which are not able to be imported importable_field_names = list(self.get_importable_fields().keys()) field_names = list(self.fields.keys()) diff --git a/src/backend/InvenTree/importer/models.py b/src/backend/InvenTree/importer/models.py index c27c6e32ff..76f5d8dcc9 100644 --- a/src/backend/InvenTree/importer/models.py +++ b/src/backend/InvenTree/importer/models.py @@ -152,7 +152,7 @@ class DataImportSession(models.Model): return supported_models().get(self.model_type, None) - def get_related_model(self, field_name: str) -> models.Model: + def get_related_model(self, field_name: str) -> Optional[models.Model]: """Return the related model for a given field name. Arguments: @@ -699,7 +699,7 @@ class DataImportRow(models.Model): if commit: self.save() - def convert_date_field(self, value: str) -> str: + def convert_date_field(self, value: str) -> Optional[str]: """Convert an incoming date field to the correct format for the database.""" if value in [None, '']: return None diff --git a/src/backend/InvenTree/importer/registry.py b/src/backend/InvenTree/importer/registry.py index 28d96d0a79..b57fe9e3ee 100644 --- a/src/backend/InvenTree/importer/registry.py +++ b/src/backend/InvenTree/importer/registry.py @@ -19,14 +19,14 @@ class DataImportSerializerRegister: def register(self, serializer) -> None: """Register a new serializer with the importer registry.""" if not issubclass(serializer, DataImportSerializerMixin): - logger.debug('Invalid serializer class: %s', type(serializer)) + logger.debug('Invalid serializer class: %s', serializer.__name__) return if not issubclass(serializer, Serializer): - logger.debug('Invalid serializer class: %s', type(serializer)) + logger.debug('Invalid serializer class: %s', serializer.__name__) return - logger.debug('Registering serializer class for import: %s', type(serializer)) + logger.debug('Registering serializer class for import: %s', serializer.__name__) if serializer not in self.supported_serializers: self.supported_serializers.append(serializer) diff --git a/src/backend/InvenTree/importer/tests.py b/src/backend/InvenTree/importer/tests.py index 97619c70a3..b4b7b99a6f 100644 --- a/src/backend/InvenTree/importer/tests.py +++ b/src/backend/InvenTree/importer/tests.py @@ -174,6 +174,36 @@ class ImportAPITest(ImporterMixin, InvenTreeAPITestCase): # Check that there are new database records self.assertEqual(PartCategory.objects.count(), N + 4) + def test_session_list(self): + """Test API endpoint which details the list of import sessions.""" + url = reverse('api-importer-session-list') + + # Construct a dummy file + f = self.helper_file('companies.csv') + + for ii in range(5): + DataImportSession.objects.create( + data_file=f, + model_type='company', + user=self.user if ii % 2 == 0 else None, + ) + + # Staff user should see all sessions + self.user.is_staff = True + self.user.save() + + response = self.get(url) + self.assertEqual(len(response.data), 5) + + # Non-staff user should only see sessions which they own + self.user.is_staff = False + self.user.save() + + response = self.get(url) + self.assertEqual(len(response.data), 3) + for session in response.data: + self.assertEqual(session['user'], self.user.pk) + class AdminTest(ImporterMixin, AdminTestCase): """Tests for the admin interface integration.""" diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po index 39225c2040..d8daa206fa 100644 --- a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 20:21\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "نقطة نهاية API غير موجودة" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "المستخدم ليس لديه الصلاحية لعرض هذا النموذج" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "تعذّر تحويل {original} إلى {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "الكمية المقدمة غير صحيحة" @@ -112,13 +104,13 @@ msgstr "أدخل التاريخ" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "ملاحظات" @@ -131,75 +123,91 @@ msgstr "القيمة '{name}' لا تظهر في تنسيق النمط" msgid "Provided value does not match required pattern: " msgstr "القيمة المقدمة لا تتطابق مع النمط المطلوب: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "سلسلة الرقم التسلسلي فارغة" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "تكرار التسلسل" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "نطاق المجموعة {group} يتجاوز الكَمّيَّة المسموح بها ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "لم يتم العثور على أرقام متسلسلة" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "إزالة علامات HTML من هذه القيمة" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "خطأ فى الاتصال" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +215,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "البريد الإلكتروني" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "" @@ -313,75 +321,66 @@ msgstr "" msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index 92cbfb52a0..186896ba06 100644 --- a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "Не е намерена крайна точка на API" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Елементите трябва да се предоставят, като списък" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Филтрите следва да се предоставят, като dict" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Потребителя няма нужното разрешение, за да вижда този модел" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Преобразуването на {original} в {unit} не беше успешно" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Въведена е недопустима стойност" @@ -112,13 +104,13 @@ msgstr "Въведи дата" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Бележки" @@ -131,75 +123,91 @@ msgstr "Значението '{name}' не отговаря на шаблона" msgid "Provided value does not match required pattern: " msgstr "Въведеното значение не отговаря на задължителния шаблон: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Липсва сериен номер" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Повтарящ се сериен номер" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Не са открити серийни номера" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Премахнете HTML маркерите от тази стойност" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Грешка при съединението" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Сървърът отговари с невалиден статусен код" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Възникна изключение" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Сървърът отговори с невалидна стойност за дължината на съдържанието (Content-Length)" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Размерът на изображението е твърде голям" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Сваляното на изображение превиши максималния размер" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Отдалеченият сървър върна празен отговор" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +215,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Трябва да активирате двойно оторизиране преди да направите, каквото и да е." @@ -259,18 +267,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "" @@ -313,75 +321,66 @@ msgstr "" msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Китайски (опростен)" msgid "Chinese (Traditional)" msgstr "Китайски (традиционен)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "Част" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Потребител" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Изпратено" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Цялостна наличност" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Място в склада" @@ -8449,11 +8514,11 @@ msgstr "Място в склада" msgid "Stock Locations" msgstr "Места в склада" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po index a6497330b8..18e7887a80 100644 --- a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API endpoint nebyl nalezen" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Seznam položek nebo filtrů musí být k dispozici pro hromadnou operaci" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Položky musí být uvedeny jako seznam" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Zadán neplatný seznam položek" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Filtry musí být uvedeny jako slovník" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Poskytnuty neplatné filtry" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Všechny filtry musí být použity s Pravda" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Zadaným kritériím neodpovídají žádné položky" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Nebyla poskytnuta žádná data" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Toto pole musí být unikátní." -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Uživatel nemá právo zobrazit tento model" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nelze převést {original} na {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Vyplněno neplatné množství" @@ -112,13 +104,13 @@ msgstr "Zadejte datum" msgid "Invalid decimal value" msgstr "Neplaté desetinné číslo" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Poznámky" @@ -131,75 +123,91 @@ msgstr "Hodnota '{name}' neodpovídá formátu vzoru" msgid "Provided value does not match required pattern: " msgstr "Poskytnutá hodnota neodpovídá požadovanému vzoru: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Nelze serializovat více než 1000 položek najednou" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Nevyplněné výrobní číslo" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Duplicitní výrobní číslo" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Neplatná skupina: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Rozsah skupiny {group} překračuje povolené množství ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Nenalezena žádná výrobní čísla" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Počet jedinečných sériových čísel ({n}) musí odpovídat množství ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Odstranit HTML tagy z této hodnoty" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Data obsahují zakázaný markdown obsah" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Chyba spojení" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Server odpověděl s neplatným stavovým kódem" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Došlo k výjimce" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Server odpověděl s neplatnou hodnotou Content-Length" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Velikost obrázku je příliš velká" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Stahování obrázku překročilo maximální velikost" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Vzdálený server vrátil prázdnou odpověď" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Zadaná URL adresa není platný soubor obrázku" @@ -207,11 +215,11 @@ msgstr "Zadaná URL adresa není platný soubor obrázku" msgid "Log in to the app" msgstr "Přihlásit se do aplikace" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Před tím, než budete dělat cokoli jiného, musíte zapnout dvoufaktorové ověřování." @@ -259,18 +267,18 @@ msgstr "Referenční číslo je příliš velké" msgid "Invalid choice" msgstr "Neplatný výběr" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Název" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Popis" msgid "Description (optional)" msgstr "Popis (volitelně)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Cesta" @@ -313,75 +321,66 @@ msgstr "Jedinečný hash dat čárového kódu" msgid "Existing barcode found" msgstr "Nalezen existující čárový kód" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Selhání úlohy" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Úloha na pozadí '{f}' se ani po {n} pokusech nezdařila" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Chyba serveru" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Server zaznamenal chybu." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Obrazek" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Musí být platné číslo" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Měna" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Vyberte měnu z dostupných možností" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "Toto pole nesmí být nulové." -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Neplatná hodnota" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Vzdálený obraz" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL souboru vzdáleného obrázku" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Stahování obrázků ze vzdálené URL není povoleno" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Nepodařilo se stáhnout obrázek ze vzdálené adresy URL" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "Neplatný formát typu obsahu" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "Typ obsahu nenalezen" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "Typ obsahu neodpovídá požadované třídě mixinu" @@ -537,11 +536,11 @@ msgstr "Čínština (zjednodušená)" msgid "Chinese (Traditional)" msgstr "Čínština (tradiční)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Dostupná aktualizace" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "Aktualizace pro InvenTree je k dispozici" @@ -553,30 +552,30 @@ msgstr "Neplatná fyzikální jednotka" msgid "Not a valid currency code" msgstr "Neplatný kód měny" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Stav objednávky" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Nadřazená sestava" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Zahrnout varianty" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Zahrnout varianty" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Zahrnout varianty" msgid "Part" msgstr "Díl" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategorie" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Sestava předků" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Přiřazeno mě" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Přiřazeno" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Vytvořeno před" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Vytvořeno po" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Má počáteční datum" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Datum začátku před" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Datum začátku po" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Má cílové datum" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Cílové datum před" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Cílové datum po" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Dokončeno před" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Dokončeno po" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Min. datum" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Max datum" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Vyloučit strom" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Sestavení musí být zrušeno před odstraněním" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Spotřební materiál" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Volitelné" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Sestava" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Sledováno" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Testovatelné" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Objednávka nevyřízená" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Přiděleno" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Spotřebováno" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostupné" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Na objednávku" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Výrobní příkaz" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokace" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Výstup" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filtrovat podle ID výstupní položky zásoby. Použijte 'null' pro nalezení odinstalovaných položek sestavení." @@ -748,41 +751,41 @@ msgstr "Filtrovat podle ID výstupní položky zásoby. Použijte 'null' pro nal msgid "Build Orders" msgstr "Výrobní příkazy" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Kusovník sestavy ještě nebyl schválen" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Výrobní příkaz nesmí být vytvořen pro neaktivní díl" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Výrobní příkaz nemůže být vytvořen pro odemčený díl" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Výrobní příkaz může být externě splněn pouze pro nakupovatelné díly" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Musí být specifikován odpovědný uživatel nebo skupina" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Díl výrobního příkazu nelze změnit" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Cílové datum musí být po datu zahájení" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Referenční číslo výrobního příkazu" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Referenční číslo výrobního příkazu" msgid "Reference" msgstr "Reference" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Stručný popis sestavení (nepovinné)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "Výrobní příkaz, kterému je tato stavba přiřazena" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Vyber téma, které chceš stavět" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referenční číslo prodejní objednávky" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "Prodejní objednávka, které je tato stavba přiřazena" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Zdrojové umístění" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Vyberte lokaci, ze které chcete brát zásoby pro sestavu (nechte prázdné, chcete-li brát zásoby z libovolné lokace)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Externí sestavení" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Tento výrobní příkaz je plněn externě" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Cílová lokace" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Vyberte lokaci, kde budou dokončené položky uloženy" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Množství sestav" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Počet skladových položek k sestavení" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Dokončené položky" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Počet skladových položek, které byly dokončeny" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Stav sestavení" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Stavový kód sestavení" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Kód dávky" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Dávkový kód pro tento výstup sestavení" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Datum vytvoření" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Datum zahájení sestavení" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Plánované datum zahájení této objednávky" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Cílové datum dokončení" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Cílové datum dokončení sestavení. Sestavení bude po tomto datu v prodlení." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Datum dokončení" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "dokončil" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Vystavil" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Uživatel, který vystavil tento výrobní příkaz" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odpovědný" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Uživatel nebo skupina odpovědná za tento výrobní příkaz" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Externí odkaz" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Odkaz na externí URL" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Priorita sestavení" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Priorita tohoto výrobního příkazu" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Kód projektu" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Kód projektu pro tento výrobní příkaz" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Nelze dokončit výrobní příkaz s otevřenými podobjednávkami" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Nelze dokončit výrobní příkaz s neúplnými výstupy" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Nepodařilo se uvolnit úlohu pro dokončení přidělení sestavy" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Výrobní příkaz {build} byl dokončen" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Výrobní příkaz byl dokončen" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "U sledovatelných dílů musí být uvedena sériová čísla" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nebyl specifikováno žádný výstup sestavení" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Výstup sestavení je již dokončen" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Výstup neodpovídá výrobnímu příkazu" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Množství musí být vyšší než nula" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Množství nemůže být větší než výstupní množství" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "Výstup výroby neprošel všemi požadovanými testy" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Výstup sestavy {serial} neprošel všemi požadavky" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "Přiřazené skladové položky jsou stále ve výrobě" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Nelze částečně dokončit výrobní příkaz s přiřazenými položkami" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Řádková položka výrobního příkazu" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Vytvořit objekt" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Vytvořit objekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Množství" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Vyžadované množství pro výrobní příkaz" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Množství spotřebovaných zásob" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Položka sestavení musí specifikovat výstup sestavení, protože hlavní díl je označen jako sledovatelný" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Vybraná skladová položka neodpovídá řádku kusovníku" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "Přiřazené množství musí být vyšší než nula" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Množství musí být 1 pro zřetězený sklad" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Zabrané množství ({q}) nesmí překročit dostupné skladové množství ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Skladová položka je nadměrně zabrána" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Skladové položky" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Zdrojová skladová položka" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Skladové množství pro sestavení" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Instalovat do" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Cílová skladová položka" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Úroveň sestavení" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Název dílu" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Vytvořit výstup" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Vytvořený výstup neodpovídá nadřazenému sestavení" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Výstupní díl se neshoduje s dílem výrobního příkazu" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Výstup sestavení je již dokončen" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Tento stavební výstup není plně přiřazen" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Zadejte množství pro výstup sestavení" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Celé množství požadované pro sledovatelné díly" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Je vyžadována celočíselná hodnota množství, protože kusovník obsahuje sledovatelné díly" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Sériová čísla" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Zadejte sériová čísla pro sestavení výstupů" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Skladové umístění pro výstup sestavy" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Automaticky zvolit sériová čísla" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automaticky přidělit požadované položky s odpovídajícími sériovými čísly" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Následující sériová čísla již existují nebo jsou neplatná" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Musí být uveden seznam výstupů sestavy" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Skladové umístění pro sešrotované výstupy" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Zahodit alokace" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Vyřadit všechny přidělené zásoby pro vyřazené výstupy" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Důvod vyřazení výstupu(ů) sestavy" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Umístění dokončených výstupů sestavy" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Přijmout neúplné přidělení" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Dokončit výstupy pokud zásoby nebyly plně přiděleny" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Spotřebovat přidělené zásoby" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Spotřebovat všechny zásoby, které již byly přiděleny této sestavě" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Odstranit neúplné výstupy" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Odstranit všechny výstupy sestavy, které nebyly dokončeny" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Není povoleno" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Přijmout jako spotřebované tímto výrobním příkazem" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Uvolnit před dokončením tohoto výrobního příkazu" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Nadměrně přidělené zásoby" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Jak chcete zacházet s extra skladovými položkami přiřazenými k tomuto výrobnímu příkazu" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Některé skladové položky byly nadměrně přiděleny" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Přijmout nepřidělené" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Přijmout, že skladové položky nebyly plně přiřazeny k tomuto výrobnímu příkazu" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Požadované zásoby nebyly plně přiděleny" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Přijmout neúplné" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Přijmout, že nebyl dokončen požadovaný počet výstupů sestavy" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Požadované množství sestavy nebylo dokončeno" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Výrobní příkaz má otevřené podpříkazy" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Výrobní příkaz musí být ve stavu produkce" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Výrobní příkaz má neúplné výstupy" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linka sestavy" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Výstup sestavy" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Výstup sestavy musí odkazovat na stejnou sestavu" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Řádková položka sestavy" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part musí ukazovat na stejný díl jako výrobní příkaz" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Položka musí být skladem" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupné množství ({q}) překročeno" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Pro přidělení sledovaných dílů musí být zadán výstup sestavy" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Výstup sestavy nelze zadat pro přidělení nesledovaných dílů" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Položky přidělení musí být poskytnuty" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Skladové místo, odkud se mají díly odebírat (ponechte prázdné, pokud chcete odebírat z libovolného místa)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Vynechat lokace" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Vyloučit skladové položky z tohoto vybraného umístění" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Zaměnitelné zásoby" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Skladové položky na více místech lze používat zaměnitelně" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Náhradní zásoby" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Povolit přidělování náhradních dílů" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Volitelné položky" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Přiřazení volitelných položek kusovníku k objednávce sestavy" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" -msgstr "" +msgstr "Všechny položky" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" -msgstr "" +msgstr "Nesledované položky" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "Sledované položky" #: build/serializers.py:1125 -msgid "Tracked Items" -msgstr "" - -#: build/serializers.py:1127 msgid "Item Type" -msgstr "" +msgstr "Typ položky" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" -msgstr "" +msgstr "Vyberte typ položky pro automatické přiřazení" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Nepodařilo se spustit úlohu automatického přidělování" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Reference v kusovníku" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID dílu kusovníku" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Název dílu kusovníku" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "Informace instalace" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Sestavení" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Díl dodavatele" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Přidělené množství" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Reference sestavení" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Název kategorie dílů" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Sledovatelné" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Zděděno" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Povolit varianty" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Položka kusovníku" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Ve výrobě" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Naplánováno na sestavení" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Externí zásoby" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Dostupné zásoby" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Dostupné náhradní zásoby" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Dostupná varianta skladu" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Spotřebované množství přesahuje přidělené množství" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Nepovinné poznámky ke spotřebě zásob" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "Sestavení položky musí odkazovat na správný výrobní příkaz" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Duplikovat přidělení položky sestavení" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "Výrobní linka musí odkazovat na správný výrobní příkaz" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Duplikovat přiřazení výrobní linky" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Musí být poskytnuta alespoň jedna linka nebo předmět" @@ -1495,43 +1494,43 @@ msgstr "Pozastaveno" msgid "Cancelled" msgstr "Zrušeno" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Hotovo" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Zásoby potřebné pro výrobní příkaz" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Výrobní příkaz {build} vyžaduje další zásoby" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Opožděný výrobní příkaz" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Objednávka sestavy {bo} je nyní opožděná" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "Je odkaz" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "Je soubor" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Uživatel nemá oprávnění k odstranění těchto příloh" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Uživatel nemá oprávnění k odstranění této přílohy" @@ -1555,794 +1554,794 @@ msgstr "Žádný plugin" msgid "Project Code Label" msgstr "Popisek kódu projektu" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Aktualizováno" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Časové razítko poslední aktualizace" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "Aktualizoval/a" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "Uživatel, který naposledy aktualizoval tento objekt" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Jedinečný kód projektu" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Popis projektu" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Uživatel nebo skupina odpovědná za tento projekt" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Tlačítko nastavení" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Hodnota nastavení" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Zvolená hodnota není platnou možností" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Hodnota musí být logická hodnota" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Hodnota musí být celé číslo" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Hodnota musí být platné číslo" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "Hodnota neprošla kontrolou platnosti" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Klíčový text musí být jedinečný" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Uživatel" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Množství cenové slevy" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Cena" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Jednotková cena při stanoveném množství" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Koncový bod" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Koncový bod, ve kterém je tento webhook přijímán" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Název tohoto webhooku" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktivní" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Je tento webhook aktivní" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token pro přístup" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Tajný klíč" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Sdílený tajný klíč pro HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "ID zprávy" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Unikátní identifikátor pro tuto zprávu" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Hostitel" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Hostitel, od kterého byla tato zpráva přijata" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Záhlaví" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Záhlaví této zprávy" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Tělo" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Tělo zprávy" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Koncový bod, na kterém byla zpráva přijata" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Pracoval na" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Byla práce na této zprávě dokončena?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "ID" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Název" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Odkaz" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Zveřejněno" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Autor" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Souhrn" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Přečteno" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Byla tato novinka přečtena?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Soubor obrázku" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "Cílový typ modelu pro tento obrázek" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "Cílové ID modelu pro tento obrázek" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Vlastní jednotka" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Symbol jednotky musí být unikátní" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Název jednotky musí být platný identifikátor" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Název jednotky" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Volitelný symbol jednotky" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definice" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Definice jednotky" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Příloha" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Chybějící soubor" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Chybějící externí odkaz" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Typ modelu" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "Cílový typ modelu pro obrázek" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Vyberte soubor k přiložení" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Komentář" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Komentář přílohy" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Datum nahrání" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Datum, kdy byl soubor nahrán" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Velikost souboru" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Velikost souboru v bytech" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Uveden neplatný typ modelu pro přílohu" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Vlastní stav" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Vlastní stavy" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Nastavení referenčního stavu" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Stav nastavený, který je prodloužen tímto vlastním stavem" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logický klíč" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "Logický klíč statusu, který je rovný tomuto vlastnímu statusu v podnikové logice" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Hodnota" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "Číselná hodnota, která bude uložena v databázi modelů" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Název stavu" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Popisek" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Štítek, který bude zobrazen na webu" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Barva" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Barva, která bude zobrazena ve frontendu" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Model" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "Model, ke kterému je tento stav přiřazen" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Musí být vybrán model" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "Musí být vybrán klíč" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "Musí být vybrán logický klíč" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "Klíč se musí lišit od logického klíče" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Musí být uvedena platná referenční třída statusu" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "Klíč se musí lišit od logických klíčů referenčního statusu" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "Název se musí lišit od názvů referenčního statusu" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Výběrové pole" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Výběrová pole" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Název výběrového pole" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Popis výběrového pole" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Uzamčeno" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Je tento seznam výběrů uzamčen?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Může být tento seznam výběru použit?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Zdrojový plugin" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Plugin, který poskytuje seznam výběru" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Zdrojový řetězec" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Volitelný řetězec identifikující zdroj použitý pro tento seznam" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Výchozí položka" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Výchozí položka pro tento seznam výběru" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Vytvořeno" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Datum a čas vytvoření výběrového seznamu" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Poslední aktualizace" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Datum a čas poslední aktualizace výběrového seznamu" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Položka seznamu výběrů" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Položky seznamu výběrů" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Seznam výběru, do kterého tato položka patří" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Název výběrového seznamu" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Popisek pro výběr seznamu" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Popis vstupu výběrového seznamu" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "Je tento výběr výběrového listu aktivní?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Šablona parametru" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "Šablona parametru" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Parametry zaškrtávacího pole nemohou mít jednotky" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Parametry zaškrtávacího pole nemohou mít výběr" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Volby musí být jedinečné" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Název šablony parametru musí být jedinečný" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "Cílový typ modelu pro šablonu tohoto parametru" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Název parametru" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Jednotky" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Fyzické jednotky pro tento parametr" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Popis parametru" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Zaškrtávací políčko" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Je tento parametr zaškrtávací políčko?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Volby" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Platné volby pro tento parametr (oddělené čárkami)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "Seznam výběru pro tento parametr" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Povoleno" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "Je šablona tohoto parametru povolena?" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "Parametr" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "Parametry" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Neplatná volba pro hodnotu parametru" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "Neplatný typ modelu pro daný parametr" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "ID modelu" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "ID cílového modelu pro tento parametr" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Šablona" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "Šablona parametru" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Data" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Hodnota parametru" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Poznámka" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Volitelné pole pro poznámku" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Sken čárového kódu" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Data čárového kódu" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Uživatel, který naskenoval čárový kód" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Časová značka" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Datum a čas skenování čárového kódu" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "Koncový bod URL, který zpracoval čárový kód" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Kontext" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Kontextová data pro skenov čárového kódu" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Odpověď" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Data z odezvy z čárového kódu" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Výsledek" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "Bylo skenování čárového kódu úspěšné?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "Vyskytla se chyba" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Odstranení Emailového logu je chráněno. Nastavte INVENTREE_PROTECT_EMAIL_LOG na False pro užmožnění odstranění." -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "E-mailová zpráva" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "E-mailové zprávy" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "Oznámeno" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "Odesláno" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "Selhalo" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Doručeno" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Potvrzeno" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "Příchozí" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "Odchozí" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Bez odpovědi" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "Sledovat doručení" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "Sledovat přečtení" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "Sledovat kliknutí" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "Globální ID" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identifikátor pro tuto zprávu (může být poskytnut externím systémem)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "ID vlákna" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identifikátor pro toto vlákno (může být poskytnut externím systémem)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "Vlákno" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "Vlákno propojeno k této zprávě" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "Priorita" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "Emailové vlákno" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "Emailové vlákna" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Klíč" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "Unikátní klíč pro toto vlákno (použitý k identifikaci vlákna)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "Unikátní identifikátor pro toto vlákno" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "Začato interně" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "Bylo toto vlákno započato interně?" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "Datum a čas kdy bylo vlákno vytvořeno" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "Datum a čas kdy bylo vlákno naposledy aktualizováno" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} zrušeno" msgid "A order that is assigned to you was canceled" msgstr "Objednávka, která je vám přidělena, byla zrušena" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Přijaté položky" @@ -2392,1235 +2391,1243 @@ msgstr "Indikuje zdali bylo nastavení přepsáno proměnou prostředí" msgid "Override" msgstr "Přepsat" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Je spuštěné" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Čekající úkoly" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Naplánované úlohy" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Neúspěšné úlohy" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID úlohy" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Unikátní ID úlohy" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Zamknout" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Čas uzamčení" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Jméno úkolu" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Funkce" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Název funkce" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumenty" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumenty úlohy" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argumenty klíčových slov" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argumenty klíčových slov úlohy" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Název souboru" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Typ modelu" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Uživatel nemá oprávnění k vytváření nebo úpravám příloh pro tento model" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "Uživatel nemá práva vytvářet nebo upravovat parametry pro tento model" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Tento výběr je uzamčen" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Žádná skupina" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Adresa URL webu je uzamčena konfigurací" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Je vyžadován restart" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Bylo změněno nastavení, které vyžaduje restart serveru" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Nevyřízené migrace" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Počet nevyřízených migrací databáze" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Aktivní varovací kódy" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Seznam aktivních varovacích kódů" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID instance" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Unikátní identifikátor pro tuto InvenTree instanci" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "ID oznámení" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Oznámit ID instance pro server na server status infu (nepřihlášeno)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Název instance serveru" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Textový popisovač pro instanci serveru" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Použít název instance" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Použít název instance v liště" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Omezit zobrazování `o aplikaci`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Zobrazovat okno `o aplikaci` pouze superuživatelům" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Jméno společnosti" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Interní název společnosti" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Základní URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Základní URL pro instanci serveru" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Výchozí měna" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Vyberte základní měnu pro cenové kalkulace" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Podporované měny" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Seznam podporovaných kódů měn" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Interval aktualizace měny" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Jak často aktualizovat směnné kurzy (pro vypnutí nastavte na nulu)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "dny" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Plugin aktualizace měny" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Plugin pro aktualizaci měn k použití" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Stáhnout z URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Povolit stahování vzdálených obrázků a souborů z externích URL" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Limit velikosti stahování" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Maximální povolená velikost stahování vzdáleného obrázku" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "User-agent použitý ke stažení z adresy URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Povolit přepsání user-agenta používaného ke stahování obrázků a souborů z externí adresy URL (ponechte prázdné pro výchozí)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Přísná validace URL" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Vyžadovat specifikaci schématu při ověřování adres URL" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Interval kontroly aktualizací" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Jak často kontrolovat aktualizace (nastavte na nulu pro vypnutí)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Automatické Zálohování" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Povolit automatické zálohování databáze a mediálních souborů" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Interval automatického zálohování" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Zadejte počet dní mezi automatickými zálohovými událostmi" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Interval mazání úloh" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Výsledky úloh na pozadí budou odstraněny po zadaném počtu dní" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Interval odstranění protokolu chyb" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Záznamy chyb budou odstraněny po zadaném počtu dní" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Interval pro odstranění oznámení" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Uživatelská oznámení budou smazána po zadaném počtu dní" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "Interval mazání emailů" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "Emailové zprávy budou odstraněny po specifikovaném počtu dní" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "Chránit Email log" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "Zabránit odstranění vstupů email logů" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Podpora čárových kódů" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Povolit podporu pro skenování čárových kódů ve webovém rozhraní" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Ukládat výsledky čárových kódů" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Ukládat výsledky skenování čárových kódů v databázi" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Maximální počet naskenovaných čárových kódů" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Maximální počet uložených výsledků skenování čárových kódů" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Zpoždění vstupu čárového kódu" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Doba zpoždění zpracování vstupu čárového kódu" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Podpora webové kamery pro čárové kódy" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Povolit skenování čárových kódů přes webovou kameru v prohlížeči" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Zobrazovat data čárových kódů" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Zobrazovat data čárových kódů v prohlížeči jako text" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Plugin pro generování čárových kódů" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Plugin na použití pro interní generaci čárových kódů" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Revize dílu" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Povolit pole revize pro díl" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "Revize pouze pro sestavy" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "Povolit revize pouze pro sestavy" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Povolit odstranění ze sestavy" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Povolit odstranění dílů, které jsou použity v sestavě" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulární vzorec výrazu pro odpovídající IPN dílu" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Povolit duplicitní IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Povolit více dílům sdílet stejný IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Povolit editaci IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Povolit změnu IPN při úpravách dílu" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Kopírovat data BOM dílu" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopírovat data BOM ve výchozím nastavení při duplikování dílu" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Kopírovat data parametrů dílu" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopírovat data parametrů ve výchozím nastavení při duplikování dílu" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Kopírovat zkušební data dílu" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Kopírovat testovací data ve výchozím nastavení při duplikování dílu" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Kopírovat šablony parametrů kategorie" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Kopírování šablon parametrů kategorie při vytváření dílu" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Díly jsou ve výchozím nastavení šablony" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Díly lze ve výchozím nastavení sestavit z jiných komponentů" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Díly lze ve výchozím nastavení použít jako dílčí komponenty" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Možné zakoupit" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Díly jsou zakoupitelné ve výchozím nastavení" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Prodejné" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Díly jsou prodejné ve výchozím nastavení" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Díly jsou sledovatelné ve výchozím nastavení" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Nehmotné (virtuální)" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Díly jsou nehmotné (virtuální) ve výchozím nastavení" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Zobrazit související díly" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Zobrazit související díly pro díl" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Počáteční údaje zásob" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Povolit vytvoření počátečního skladu při přidání nové části" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Počáteční údaje dodavatele" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Povolit vytvoření počátečních dat dodavatele při přidávání nového dílu" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Formát zobrazení jména dílu" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Formát pro zobrazení názvu dílu" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Výchozí ikona kategorie dílu" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Výchozí ikona kategorie dílu (prázdné znamená bez ikony)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Minimální počet desetinných míst u cen" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimální počet desetinných míst k zobrazení u cenových údajů" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Maximální počet desetinných míst u cen" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximální počet desetinných míst k zobrazení u cenových údajů" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Použít ceny dodavatele" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Zahrnout cenová zvýhodnění dodavatelů do celkových cenových kalkulací" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Přepsání historie nákupu" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historické ceny nákupních objednávek mají přednost před cenovými zvýhodněními dodavatele" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Použít ceny skladových položek" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Použít ceny z ručně zadaných skladových údajů pro cenové kalkulace" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Stáří cen skladových položek" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Vyloučit skladové položky starší než tento počet dní z cenových kalkulací" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Použít cenu varianty" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Zahrnutí cen variant do celkových cenových kalkulací" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Pouze aktivní varianty" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Pro výpočet ceny varianty použijte pouze aktivní díly varianty" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "Automatická aktualizace cen" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "Automaticky aktualizovat cenu dílu když se změní interní data" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Interval přestavby cen" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Počet dní před automatickou aktualizací cen dílů" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Interní ceny" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Povolit interní ceny pro díly" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Přepis interní ceny" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Pokud jsou k dispozici, interní ceny mají přednost před výpočty cenového rozpětí" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "Povolit nulovou hodnotu kusovníku" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "Přijmout nulové množství pro položku kusovníku. Umožňuje použít nastavení množství pro definování množství požadovaného pro sestavení, nezávisle na počtu staveb" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Povolit tisk štítků" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Povolit tisk štítků z webového rozhraní" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "DPI rozlišení štítků" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Rozlišení DPI při generování obrazových souborů, které se dodávají do zásuvných modulů pro tisk štítků" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Povolit reporty" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Povolit generování reportů" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Režim ladění chyb" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Generovat reporty v režimu ladění (HTML výstup)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Zaznamenávat chyby reportů" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Zaznamenávat chyby, které se vyskytnou při vytváření reportů" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Velikost stránky" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Výchozí velikost stránky pro PDF reporty" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Vynutit jednotky parametru" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Pokud jsou uvedeny jednotky, musí hodnoty parametrů odpovídat zadaným jednotkám" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Globálně unikátní sériová čísla" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Sériová čísla pro skladové položky musí být globálně unikátní" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Odstranit vyčerpané zásoby" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Určuje výchozí chování při vyčerpání zásoby položky" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Šablona kódu dávky" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Šablona pro generování výchozích kódů dávky pro skladové položky" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Expirace zásob" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Povolit funkci expirace zásob" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Prodat prošlé zásoby" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Povolit prodej prošlých zásob" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Čas stáří zásob" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Počet dnů, po které jsou skladové položky považovány za nevyužité před uplynutím doby expirace" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Sestavit prošlé zásoby" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Povolit sestavování s prošlými zásobami" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Kontrola vlastnictví zásob" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Umožnit kontrolu vlastnictví nad skladovými místy a položkami" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Výchozí ikona umístění zásob" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Výchozí ikona umístění zásob (prázdné znamená bez ikony)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Zobrazit nainstalované skladové položky" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Zobrazit nainstalované skladové položky ve skladových tabulkách" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Zkontrolovat BOM při instalaci položek" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Nainstalované skladové položky musí existovat v BOM pro nadřazený díl" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Povolit převod mimo sklad" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Umožnit přesun skladových položek, které nejsou na skladě, mezi skladovými místy" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Referenční vzor objednávky sestavy" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole Objednávka sestavy" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Vyžadovat odpovědného vlastníka" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Ke každé objednávce musí být přiřazen odpovědný vlastník" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Vyžadovat aktivní díl" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Zabránit vytváření výrobních příkazů pro neaktivní díly" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Vyžadovat uzamčený díl" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Zabránit vytváření výrobních příkazů pro odemčené díly" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "Vyžadovat schválený kusovník" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Zabránit vytváření výrobních příkazů, dokud není schválen kusovník" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "Vyžadovat uzavření podobjednávek" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Zabránit dokončení výrobního příkazu dokud nebudou uzavřeny všechny podpříkazy" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "Externí výrobní příkazy" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "Povolit funkcionalitu externích výrobních příkazů" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Blokovat, dokud testy neprojdou" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Zabránit dokončení výstupů sestavy, dokud neprojdou všechny požadované testy" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Povolit vracení objednávek" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Povolit funkci vrácení objednávky v uživatelském rozhraní" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Referenční vzor návratové objednávky" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Požadovaný vzor pro vygenerování referenčního pole Návratová objednávka" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Úprava dokončených návratových objednávek" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Umožnit úpravu návratových objednávek po jejich dokončení" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Referenční vzor prodejní objednávky" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole prodejní objednávky" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Výchozí přeprava prodejní objednávky" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Povolit vytvoření výchozí přepravy s prodejními objednávkami" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Úprava dokončených prodejních objednávek" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Umožnit úpravy prodejních objednávek po jejich odeslání nebo dokončení" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "Zásilka vyžaduje kontrolu" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "Zabránit dokončení zásilek dokud nebudou zkontrolovány položky" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Označit odeslané objednávky jako dokončené" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Prodejní objednávky označené jako odeslané se automaticky dokončí a obejdou stav „odesláno“" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Referenční vzor nákupní objednávky" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole nákupní objednávky" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Úprava dokončených nákupních objednávek" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Umožnit úpravy nákupních objednávek po jejich odeslání nebo dokončení" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Převést měnu" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "Převést hodnotu předmětu na základní měnu při příjmu zásob" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Automatické dokončování nákupních objednávek" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automaticky označit nákupní objednávky jako kompletní, jakmile jsou přijaty všechny řádkové položky" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Povolit pole zapomenutého hesla" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Povolení funkce zapomenutého hesla na přihlašovacích stránkách" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Povolit registrace" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Povolit samoregistraci uživatelů na přihlašovacích stránkách" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Povolit SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Povolit SSO na přihlašovacích stránkách" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Povolit SSO registraci" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Povolit samoregistraci uživatelů prostřednictvím SSO na přihlašovacích stránkách" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "Povolit synchronizaci SSO skupin" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Povolit synchronizaci InvenTree skupin se skupinami poskytnutými IdP" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "klíč SSO skupiny" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Název deklarace skupinového atributu poskytnutého IdP" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "mapa SSO skupiny" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Mapování ze skupin SSO do místních InvenTree skupin. Pokud místní skupina neexistuje, bude vytvořena." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Odstranit skupiny mimo SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Zdali mají být skupiny přiřazené uživateli odstraněny pokud nemají backend of IdP. Vypnutí tohoto nastavení můžu způsobit problémy se zabezpečením" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Vyžadován e-mail" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Požadovat, aby uživatel při registraci zadal e-mail" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Automaticky vyplnit SSO uživatele" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automaticky vyplnit údaje o uživateli z údajů o účtu SSO" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Mail dvakrát" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Při registraci dvakrát požádat uživatele o zadání e-mailu" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Heslo dvakrát" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Při registraci dvakrát požádat uživatele o heslo" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Povolené domény" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Omezit registraci na určité domény (oddělené čárkou a začínající @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Skupina při registraci" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Skupina do které jsou nový uživatelé přiřazeni při registraci. Pokud je povolena synchronizace SSO skupin, tato skupina lze přiřadit pouze pokud nezle přiřadit skupinu od IdP." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Vynutit MFA" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Uživatelé musí používat vícefaktorové zabezpečení." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Povolení tohoto nastavení bude vyžadovat více fázové ověření u všech uživatelů. Všechny relace budou okamžitě ukončeny." -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Zkontrolovat pluginy při spuštění" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Zkontrolujte, zda jsou při spuštění nainstalovány všechny pluginy - povolit v kontejnerových prostředích" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Zkontrolovat aktualizace pluginů" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Povolit pravidelné kontroly aktualizací nainstalovaných pluginů" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Povolit integraci URL" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Povolit plug-inům přidávat trasy URL" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Povolit integraci navigace" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Povolit integrování pluginů do navigace" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Povolit integraci aplikací" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Povolit pluginům přidávát aplikace" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Povolit integraci plánu" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Povolit pluginům spouštění naplánovaných úloh" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Povolit integraci událostí" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Povolit pluginům reagovat na interní události" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Povolit rozhraní intergace" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Povolit integrování pluginů do uživatelského rozhraní" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "Povolit integraci emailu" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Povolit pluginům zpracování odchozích/příchozích emailů" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "Povolit projektové kódy" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Povolit projektové kódy pro sledování projektů" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "Povolit inventuru" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "Povolit funkcionalitu pro zaznamenávání historických stavů zásob a hodnoty" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Vyloučit externí umístění" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Vyloučit skladové položky z externích lokací z inventury" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Perioda automatické inventury" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "Počet dní mezi automatickým záznamem inventury" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "Odstranit staré záznamy inventur" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "Odstranit záznamy inventur starší než zadaný počet dní" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "Interval odstranění inventury" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "Záznamy inventur budou odstraněny po zadaném počtu dní" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "Odstranit staré záznamy sledování zásob" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "Odstranit staré záznamy sledování zásob starší než zadaný počet dní" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "Interval odstranění sledování zásob" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "Záznamy sledování zásob budou odstraněny po zadaném počtu dní" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Zobrazit celá jména uživatelů" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Zobrazit plná jména uživatelů namísto uživatelských jmen" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "Zobrazit uživatelské profily" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "Zobrazit profily uživatelů na jejich profilové stránce" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Povolit data zkušební stanice" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Povolit sběr dat ze zkušební stanice pro výsledky testů" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "Povolit ping stroje" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Povolit pravidelný úkol pingu registrovaných strojů pro kontrolu jejich stavu" @@ -3965,346 +3972,346 @@ msgstr "Díl je aktivní" msgid "Manufacturer is Active" msgstr "Výrobce je aktivní" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "Díl dodavatele je aktivní" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "Primární díl dodavatele" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "Interní díl je aktivní" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "Dodavatel je aktivní" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Výrobce" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Společnost" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Má zásoby" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Společnosti" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Popis společnosti" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Popis společnosti" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Webová stránka" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Webové stránky společnosti" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Telefonní číslo" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kontaktní telefonní číslo" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontaktní e-mailová adresa" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Kontaktní místo" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Odkaz na externí informace o společnosti" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Je tato společnost aktivní?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Je zákazník" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Prodáváte zboží této společnosti?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Je dodavatel" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Zakupujete zboží od této společnosti?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Je výrobce" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Vyrábí tato společnost díly?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Výchozí měna používaná pro tuto společnost" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "DIČ" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "DIČ společnosti" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Adresa" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Adresy" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Vyberte společnost" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Název adresy" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Název popisující záznam adresy" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Primární adresa" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Nastavit jako primární adresu" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Řádek 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "1. řádek adresy" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Řádek 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "2. řádek adresy" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "PSČ" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Město/Region" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "PSČ město/region" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Stát/kraj" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Stát nebo provincie" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Země" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Adresovaná země" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Doručovací poznámky pro kurýra" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Poznámky pro kurýra" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Interní přepravní poznámky" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Doručovací poznámky pro interní použití" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Odkaz na informace o adrese (externí)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Výrobce dílu" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Základní díl" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Zvolte díl" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Vyberte výrobce" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Číslo dílu výrobce" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL pro odkaz na díl externího výrobce" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Popis dílu výrobce" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Jednotky balení musí být kompatibilní s jednotkami základních dílů" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Jednotky balení musí být větší než nula" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Odkazovaný díl výrobce musí odkazovat na stejný základní díl" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Dodavatel" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Vyberte dodavatele" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Skladová evidence dodavatele" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Je tento díl dodavatele aktivní?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "Primární" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "Je tento primární díl dodavatele připojen k dílu?" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Vyberte díl výrobce" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "Adresa URL pro odkaz na externí díl dodavatele" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Popis dílu dodavatele" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "základní cena" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimální poplatek (např. poplatek za skladování)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Balení" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Balení dílu" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Počet kusů v balení" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Celkové množství dodávané v jednom balení. Pro jednotlivé položky ponechte prázdné." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "více" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Objednat více" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Množství dostupné od dodavatele" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Dostupnost aktualizována" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Datum poslední aktualizace údajů o dostupnosti" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Cenová sleva dodavatele" @@ -4316,7 +4323,7 @@ msgstr "Výchozí měna používaná pro tohoto dodavatele" msgid "Company Name" msgstr "Jméno společnosti" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Skladem" @@ -4452,7 +4459,7 @@ msgstr "Pole neexistuje v cílovém modelu" msgid "Selected field is read-only" msgstr "Vybrané pole je pouze pro čtení" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Importovací relace" @@ -4464,31 +4471,31 @@ msgstr "Pole" msgid "Column" msgstr "Sloupec" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Index řádku" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Původní data řádku" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Chyby" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Platné" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "ID je vyžadováno pro aktualizaci existujících záznamů." -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Žádný záznam nalezen pro zadané ID" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Poskytnut neplatný formát ID" @@ -4588,7 +4595,7 @@ msgstr "Počet kopií, které se mají tisknout pro každý štítek" msgid "Connected" msgstr "Připojeno" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Neznámý" @@ -4716,105 +4723,117 @@ msgstr "Maximální pokrok" msgid "Maximum value for progress type, required if type=progress" msgstr "Maximální hodnota pro pokrok typu, vyžadováno pokud typ=pokrok" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Označení objednávky" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Vynikající" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Má projektový kód" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Vytvořil(a)" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Vytvořeno před" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Vytvořeno po" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "Má počáteční datum" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "Datum začátku před" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "Datum začátku po" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "Má cílové datum" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Cílové datum před" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Cílové datum po" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "Aktualizováno před" + +#: order/api.py:234 +msgid "Updated After" +msgstr "Aktualizováno po" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Má cenu" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Dokončeno před" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Dokončeno po" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "Externí výrobní příkaz" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Objednávka" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Objednávka byla dokončena" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Interní díl" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Objednávka čeká na vyřízení" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Dokončeno" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Má zásilku" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Nákupní objednávka" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Nákupní objednávka" msgid "Sales Order" msgstr "Prodejní objednávka" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Celková cena" msgid "Total price for this order" msgstr "Celková cena za tuto objednávku" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Měna objednávky" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Měna pro tuto objednávku (nechte prázdné pro použití výchozí hodnoty společnosti)" @@ -4851,718 +4870,742 @@ msgstr "Měna pro tuto objednávku (nechte prázdné pro použití výchozí hod msgid "This order is locked and cannot be modified" msgstr "Tato objednávka je uzamčena a nelze ji upravit" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Kontakt nesouhlasí s vybranou společností" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Datum zahájení musí být před cílovým datem" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "Adresa nesouhlasí s vybranou společností" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Popis objednávky (volitelné)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Vyberte kód projektu pro tuto objednávku" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Odkaz na externí stránku" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Datum zahájení" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Plánované datum zahájení této objednávky" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cílené datum" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Očekávané datum doručení objednávky. Objednávka bude po tomto datu splatná." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Datum vystavení" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Datum vystavení objednávky" #: order/models.py:506 +msgid "Updated At" +msgstr "Aktualizováno v" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Uživatel nebo skupina odpovědná za tuto objednávku" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Kontaktní bod pro tuto objednávku" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Adresa společnosti pro tuto objednávku" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Číslo objednávky" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Stav" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Stav objednávky" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Společnost, od které se položky objednávají" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Reference dodavatele" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Referenční kód objednávky dodavatele" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "přijal" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Datum dokončení objednávky" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Místo určení" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Cílové místo pro přijaté položky" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Dodavatel dílu se musí shodovat s dodavatelem PO" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Řádková položka neodpovídá nákupní objednávce" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Řádkové položce chybí propojený díl" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Množství musí být kladné" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Zákazník" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Společnost, jíž se položky prodávají" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Stav prodejní objednávky" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Reference zákazníka " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Referenční kód objednávky zákazníka" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Datum odeslání" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "odesláno společností" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "Objednávka je již dokončena" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "Objednávka je již zrušena" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Pouze otevřená objednávka může být označena jako kompletní" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Objednávku nelze dokončit, protože dodávky jsou nekompletní" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Objednávka nemůže být dokončena, protože jsou neúplné přiřazení" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "Objednávka nemůže být dokončena, protože jsou neúplné řádkové položky" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "Objednávka je uzamčena a nelze ji upravit" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Množství položky" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Označení řádkové položky" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Poznámky k řádkovým položkám" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Cílové datum pro tuto řádkovou položku (pro použití cílového data z objednávky ponechte prázdné)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Popis řádkové položky (nepovinné)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Dodatečný kontext pro tento řádek" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Cena za jednotku" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "Řádková položka nákupní objednávky" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "Dodavatelský díl musí odpovídat dodavateli" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "Objednávka sestavení musí být označená jako externí" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "Objednávka sestavení může být propojena pouze s montážními díly" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "Výrobní příkaz musí odpovídat lince předmětu dílu" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Díl dodavatele" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Doručeno" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Počet přijatých položek" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Nákupní cena" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Jednotková nákupní cena" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "Externí výrobní příkaz který má být splněn touto linkovou položkou" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "Nákupní příkaz extra linka" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "Řádková položka prodejní objednávky" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "K prodejní objednávce lze přiřadit pouze prodejné díly" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Prodejní cena" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Jednotková prodejní cena" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Odesláno" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Odeslané množství" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "Zásilka prodejní objednávky" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "Adresa zásilky musí odpovídat adrese zákazníka" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "Dodací adresa pro tuto zásilku" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Datum odeslání" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Datum doručení" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Datum doručení zásilky" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Kontroloval(a)" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Uživatel, který zkontroloval tuto zásilku" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Doprava" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Číslo zásilky" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Sledovací číslo" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Informace o sledování zásilky" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Číslo faktury" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Referenční číslo přiřazené faktury" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Zásilka již byla odeslána" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Zásilka nemá žádné přidělené skladové položky" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "Zásilka musí být zkontrolována než může být dokončená" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "Prodejní příkaz extra linka" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "Přidělení prodejní objednávky" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "Skladová položka nebyla přiřazena" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Nelze přidělit skladovou položku na řádek s jiným dílem" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Nelze přidělit skladovou položku na řádek bez dílu" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Přidělené množství nesmí překročit množství zásob" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Zabrané množství musí být větší než nula" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "Množství musí být 1 pro serializovanou skladovou položku" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Prodejní objednávka neodpovídá zásilce" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Zásilka neodpovídá prodejní objednávce" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Řádek" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Odkaz na zásilku z prodejní objednávky" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Položka" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Vyberte skladovou položku pro přidělení" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Zadejte množství pro přidělení zásob" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Reference návratové objednávky" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Společnost, od které se vrací položky" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Stav návratové objednávky" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "Linkový předmět vratky" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "Zásobní položka musí být specifikována" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "Množství vratky přesahuje množstvní zásob" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "Množstvní vratky musí být více než nula" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "Neplatné množství pro sériovou skladovou položku" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Vyberte položku pro vrácení od zákazníka" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Datum přijetí" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "Datum příjetí této vratky" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Výsledek" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Výsledky pro tuto položku" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Náklady spojené s návratem nebo opravou této položky" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "Vratka extra linka" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID objednávky" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID objednávky k duplikaci" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Kopírovat řádky" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Kopírovat řádkové položky z původní objednávky" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Kopírovat extra řádky" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Kopírovat extra řádkové položky z původní objednávky" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopírovat parametry" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "Kopírovat parametry objednávky z původní objednávky" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Řádkové položky" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Dokončené řádky" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplikovat objednávku" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Specifikujte možnosti pro duplikaci této objednávky" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Neplatné ID objednávky" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Název dodavatele" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Objednávku nelze zrušit" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Povolit uzavření objednávky s neúplnými řádkovými položkami" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "Objednávka má nedokončené řádkové položky" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "Objednávka není otevřena" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Automatická cena" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automaticky vypočítat nákupní cenu na základě údajů o dílech dodavatele" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Měna nákupní ceny" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Sloučit položky" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Sloučit položky se stejným dílem, místem určení a cílovým datem do jedné řádkové položky" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "Číslo zboží (SKU)" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Interní číslo dílu" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Interní název dílu" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Musí být uveden díl dodavatele" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Objednávka musí být zadána" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Dodavatel musí odpovídat objednávce" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Objednávka musí odpovídat dodavateli" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Řádková položka" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Vyberte cílové umístění pro přijaté položky" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Zadat kód šarže pro příchozí skladové položky" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Datum expirace" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "Zadejte datum expirace pro příchozí skladové položky" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Zadat sériová čísla pro příchozí skladové položky" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "Přepsat informace o obalu pro příchozí skladové položky" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "Dodatečná poznámka pro příchozí skladové položky" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Čárový kód" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Naskenovaný čárový kód" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Tento čárový kód se již používá" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Musí být uvedeny řádkové položky" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Místo určení musí být specifikováno" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Hodnoty dodaných čárových kódů musí být unikátní" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Zásilky" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Dokončené zásilky" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "Přidělené řádky" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Měna prodejní ceny" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Přidělené položky" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Nebyly poskytnuty žádné údaje o zásilce" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Řádková položka není přiřazena k této objednávce" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Množství musí být kladné" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Zadejte sériová čísla pro přidělení" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "Zásilka již byla odeslána" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "Zásilka není spojena s touto objednávkou" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Nebyla nalezena žádná shoda pro následující sériová čísla" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Následující sériová čísla nejsou k dispozici" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Řádkový předmět vratky" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Řádková položka neodpovídá vratce" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Řádková položka již byla přijata" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Položky lze přijímat pouze proti objednávkám, které probíhají" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "Množství k vrácení" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Měna ceny řádku" @@ -5598,146 +5641,146 @@ msgstr "Vrácení peněz" msgid "Reject" msgstr "Odmítnout" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Objednávka po splatnosti" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Nákupní objednávka {po} je nyní opožděná" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Opožděná prodejní objednávka" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Prodejní objednávka {so} je nyní opožděná" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Vratka po termínu vrácení" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "Vratka {ro} je nyní opožděná" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Označené" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filtrovat podle kategorií s hvězdičkou" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Hloubka" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtrovat podle hloubky kategorie" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Nejvyšší úroveň" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtrovat podle nejvyšších kategorií" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Kaskáda" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Zahrnout podkategorie do filtrovaných výsledků" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Předek" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filtrovat podle nadřazené kategorie" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Vyloučit podkategorie v zadané kategorii" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Má výsledky" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Je varianta" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Je revizí" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Má revize" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Kusovník schválen" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Kaskádové kategorie" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Pokud je pravda, zahrne položky z podkategorií dané kategorie" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtrovat podle numerického ID kategorie nebo doslovného 'null'" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "Sestavený díl je aktivní" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "Sestavený díl je sledovatelný" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Sestavený díl je testovatelný" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "Kompotenta je aktivní" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "Komponenta je sledovatelná" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "Díl komponenty je testovatelný" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "Komponenta je část sestavy" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "Komponenta je virtuální" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "Má dostupné zásoby" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Využití" @@ -5750,7 +5793,7 @@ msgstr "Kategorie dílu" msgid "Part Categories" msgstr "Kategorie dílů" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Výchozí umístění" @@ -5778,7 +5821,7 @@ msgstr "Výchozí klíčová slova pro díly v této kategorii" msgid "Icon" msgstr "Ikona" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikona (volitelná)" @@ -5799,7 +5842,7 @@ msgstr "Výchozí hodnota" msgid "Default Parameter Value" msgstr "Výchozí hodnota parametru" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Díly" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "Díl nemůže být revize same sebe" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "Nelze udělat revizi dílu, který už je revize" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "Kód revize musí být uveden" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "Revize jsou povoleny pouze pro sestavy" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "Nelze provést revizi šablony" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "Nadřazený díl musí odkazovat na stejnou šablonu" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Skladová položka s tímto sériovým číslem již existuje" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplicitní IPN není povoleno v nastavení dílu" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "Duplicitní díl revize již existuje." -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Díl s tímto názvem, IPN a revizí již existuje." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Díly nemohou být přiřazeny do strukturálních kategorií!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Název dílu" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Je šablonou" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Je tento díl šablona?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Je tento díl varianta jiného dílu?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Varianta" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Popis dílu (nepovinné)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Klíčová slova" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Klíčová slova dílu pro zlepšení vyhledávání" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Kategorie dílu" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interní číslo dílu (IPN)" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Číslo revize nebo verze dílu" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Revize" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "Je tento díl revizí jiného dílu?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Revize" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Kde je tato položka obvykle skladněna?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Výchozí expirace" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Expirační čas (ve dnech) pro zásoby tohoto dílu" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimální zásoby na skladě" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Minimální povolená úroveň zásob" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Měrné jednotky pro tento díl" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Lze tento díl sestavit z jiných dílů?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Lze tento díl použít k sestavení jiných dílů?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Lze u tohoto dílu sledovat jednotlivé položky?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "Může mít tento díl zaznamenány výsledky testu?" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Může být tento díl zakoupen od externích dodavatelů?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Lze tento díl prodávat zákazníkům?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Je tento díl aktivní?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Uzamčené díly nelze upravit" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "Je to virtuální díl, například softwarový produkt nebo licence?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "Kusovník ověřen" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "Je kusovník pro tuto část platný?" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Kontrolní součet kusovníku" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Uložený kontrolní součet kusovníku" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "Kusovník zkontroloval" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Datum kontroly kusovníku" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Vytváření uživatele" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Vlastník odpovědný za tento díl" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Prodat více" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Měna použitá pro výpočet cen v mezipaměti" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Minimální cena kusovníku" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Minimální cena komponent dílu" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Maximální cena kusovníku" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Maximální cena komponent dílu" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Minimální nákupní cena" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Minimální historická nákupní cena" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Maximální nákupní cena" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Maximální historická nákupní cena" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Minimální interní cena" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Minimální cena závislá na množstevní slevě" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Maximální interní cena" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Maximální cena závislá na množstevní slevě" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Minimální cena dodavatele" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Minimální cena dílu od externích dodavatelů" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Maximální cena dodavatele" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Maximální cena dílu od externích dodavatelů" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Minimální cena variant" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Vypočítané minimální náklady na varianty dílů" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Maximální cena variant" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Vypočítané maximální náklady na varianty dílů" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Minimální cena" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Přepsat minimální náklady" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Maximální cena" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Přepsat maximální náklady" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Vypočítané minimální celkové náklady" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Vypočítané maximální celkové náklady" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Minimální prodejní cena" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Minimální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Maximální prodejní cena" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Maximální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Minimální prodejní cena" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Minimální historická prodejní cena" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Maximální prodejní cena" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Maximální historická prodejní cena" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Díl na inventuru" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Počet položek" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Počet jednotlivých položek zásob v době inventury" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Celkové dostupné zásoby v době inventury" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Datum provedení inventury" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Minimální cena zásob" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Odhadovaná minimální cena zásob k dispozici" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Maximální cena zásob" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Odhadovaná maximální cena zásob k dispozici" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "Částeční sleva v ceně" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "Šablona testu položky" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Neplatný název šablony - musí obsahovat alespoň jeden alfanumerický znak" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Zkušební šablony lze vytvořit pouze pro testovatelné části" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "Testovací šablona se stejným klíčem již existuje pro díl" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Název testu" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Zadejte název testu" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "Testovací klíč" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "Zjednodušený klíč pro testování" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Popis testu" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Zadejte popis pro tento test" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "Je tento test povolen?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Požadováno" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Je tato zkouška vyžadována k projití?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Požadovaná hodnota" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Vyžaduje tato zkouška hodnotu při výpočtu výsledku zkoušky?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Vyžaduje přílohu" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Vyžaduje tato zkouška soubor při přidání výsledku testu?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "Platné volby pro tento test (oddělené čárkami)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "Položku kusovníku nelze změnit - sestava je uzamčena" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Položku kusovníku nelze změnit - varianta montáže je uzamčena" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Vyberte nadřazený díl" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Poddílec" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Vyberte díl které bude použit v kusovníku" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Kusovníkové množství pro tuto kusovníkovou položku" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Tato položka kusovníku je nepovinná" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Tento předmět kusovníku je spotřebovatelný (není sledován v objednávkách stavby)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "Nastavit množství" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Dodatečné množství potřebné pro sestavení k vyúčtování ztráty nastavení" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "Přirozené ztráty" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Odhadované přirozené ztráty pro stavbu, vyjádřeno v procentech (0-100)" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "Zaokrouhlení více" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Zaokrouhlit požadované množství produkce na nejbližší násobek této hodnoty" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Reference položky kusovníku" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Poznámky k položce kusovníku" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Kontrolní součet" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Kontrolní součet řádku kusovníku" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Schváleno" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Tato položka kusovníku ještě nebyla schválena" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Se zdědí" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Tento kusovník se zdědí kusovníky pro varianty dílů" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Skladové položky pro varianty dílu lze použít pro tuto položku kusovníku" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Množství musí být celé číslo pro sledovatelné díly" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Poddíl musí být specifikován" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Náhradní položka kusovníku" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "Náhradní díl nemůže být stejný jako hlavní díl" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Nadřazená položka kusovníku" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Náhradní díl" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Díl 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Díl 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Vyberte související díl" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Poznámka pro tento vztah" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Část vztahu nemůže být vytvořena mezi dílem samotným" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Duplicitní vztah již existuje" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Nadřazená kategorie" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Nadřazená kategorie dílu" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Výsledky" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Počet výsledků zaznamenaných podle této šablony" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Nákupní měna této skladové položky" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Soubor není obrázek" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Původní díl" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Vyberte původní díl, který má být duplikován" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopírovat obrázek" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Kopírovat obrázek z původního dílu" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Kopírovat kusovník" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Kopírovat kusovník z původního dílu" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Kopírovat parametry" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Kopírovat data parametrů z původního dílu" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Kopírovat poznámky" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Kopírovat poznámky z původního dílu" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Kopírovat testy" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Kopírovat testovací šablony z původního dílu" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Počáteční skladové množství" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Zadejte počáteční skladové množství pro tuto část. Pokud je množství nulové, není přidáno žádné." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Počáteční skladové místo" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Zadejte počáteční skladové místo pro tento díl" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Vyberte dodavatele (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Vyberte výrobce (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Číslo dílu výrobce" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Vybraná společnost není platný dodavatel" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Vybraná společnost není platný výrobce" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Výrobce dílu se stejným MPN již existuje" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Dodavatelský díl s tímto SKU již existuje" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Název kategorie" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Budova" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Množství tohoto dílu, které je v současné době ve výrobě" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Zbývající množství tohoto dílu, které má být postaveno" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Skladové položky" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "Revize" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Celkem skladem" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Nezařazené zásoby" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Skladové varianty" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Duplikovat díl" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kopírovat počáteční data z jiného dílu" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Počáteční zásoby" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Vytvořit díl s počátečním množstvím zásob" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Informace o dodavateli" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Přidat počáteční informace dodavatele pro tento díl" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kopírovat parametry kategorie" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Kopírovat šablony parametrů z vybrané kategorie dilu" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Stávající obrázek" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Název souboru existujícího obrázku dílu" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Obrázek neexistuje" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Schválit celý kusovník" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Lze postavit" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Vyžadováno pro výrobní objednávku" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Přířazeno výrobním objednávkám" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Vyžadováno pro prodejní objednávky" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Přiřazeno prodejním objednávkám" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "IPN dílu" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "Popis dílu" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Vyberte díl u kterého chce vytvořit informace inventury (i pro jeho varianty)" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "Vyberte kategorii pro obsažení všech dílů v dané kategorii (a podkategoriích)" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "Vyberte lokaci pro obsažení všech dílů se zásobami na dané lokaci (včetně pod-lokací)" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "Generovat vstupy inventury" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "Uložit vstupy inventury pro vybrané díly" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "Generovat report" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "Generovat report inventury pro vybrané díly" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minimální cena" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Přespat vypočítanou hodnotu pro minimální cenu" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Měna minimální ceny" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Maximální cena" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Přespat vypočítanou hodnotu pro maximální cenu" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Měna maximální ceny" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Aktualizovat" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Aktualizovat cenu pro díl" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nelze převést z poskytnutých měn na {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Minimální cena musí být vyšší než maximální cena" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Maximální cena nesmí být nížší než minimální cena" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "Množství musí být větší nebo rovno nule" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Vybrat nadřazenou sestavu" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Vyberte komponentu dílu" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Vyberte díl pro kopírování kusovníku z" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Odstranit existující data" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Odstranit existující položky kusovníku před kopírováním" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Zahrnout zděděné" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Zahrnout položky kusovníku které jsou zdědené z šablonových dílů" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Přeskočit neplatné řádky" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Povolte tuto možnost pro přeskočení neplatných řádků" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Kopírovat náhradní díly" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopírovat náhradní díly při duplikaci položek kusovníku" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Oznámení o nízkých zásobách" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Dostupné zásoby pro {part.name} klesly pod nastavenou minimální úroveň" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Oznámení o zastaralých zásobách" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "Máte 1 skladovou položku blížící se k datu expirace" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "Máte skladem {item_count} položek, jejichž data expirace se blíží" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Bez data expirace" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "Expirovalo před {abs(days_diff)} dny" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Expiruje dnes" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} dní" @@ -7580,64 +7620,77 @@ msgstr "Poskytuje podporu pro skenování TME čárových kódů" msgid "The Supplier which acts as 'TME'" msgstr "Dodavatel, který funguje jako 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Pouze pracovníci mohou spravovat pluginy" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Instalace pluginu je zakázana" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin byl úspěšně nainstalován" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plugin nainstalovaný do {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Plugin nebyl nalezen v registru" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Plugin není plugin balíček" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Název balíčku pluginu nebyl nalezen" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Pouze pracovníci mohou spravovat pluginy" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Odinstalace pluginu je zakázána" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Plugin nemůže být odinstalován, protože je aktuálně aktivní" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "Plugin nemůže být odinstalován, protože je povinný" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "Plugin nemůže být odinstalován, protože to je vzorový plugin" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "Plugin nemůže být odinstalován, protože to je vestavěný plugin" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Plugin není nainstalován" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Inslalace pluginu nebyla nalezena" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Plugin odinstalován úspěšně" @@ -7689,21 +7742,21 @@ msgstr "Balíčkový plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nebyl nalezen žádný autor" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Plugin '{p}' není kompatibilní s aktuální verzí InvenTree {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Plugin vyžaduje alespoň verzi {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Plugin vyžaduje nanejvýš verzi {v}" @@ -7884,51 +7937,51 @@ msgstr "Instalace nebyla potvrzena" msgid "Either packagename or URL must be provided" msgstr "Musí být uveden název balíčku nebo URL" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Plné načtení" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Provede plné načtení registru pluginů" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Vynutit přenačtení" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Vynutit přenačtění registru pluginů, i když je jich načten" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Sbírat pluginy" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Sbírat pluginy a přidávat je do registru" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Aktivovat plugin" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Aktivovat tento plugin" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Povinný plugin nemůže být vypnut" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Odstranit nastavení" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Odstranit konfiguraci pluginu z databáze" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "Uživatel pro kterého platí toto nastavení" @@ -8190,7 +8243,7 @@ msgstr "Celkem" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Sériové číslo" @@ -8215,7 +8268,7 @@ msgstr "Report o testu skladové položky" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Instalované položky" @@ -8248,184 +8301,196 @@ msgstr "Žádný výsledek (povinný)" msgid "No result" msgstr "Žádný výsledek" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Soubor aktiva neexistuje" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Soubor obrázku nebyl nalezen" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "part_image tag vyžaduje instanci dílu" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image tag vyžaduje intanci společnosti" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filtrovat dle hloubky lokace" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Filtrovat dle nejvyšší lokace" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Zahrnout pod-lokace ve filtrovaných výsledcích" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Nadřazená místo" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtrovat podle nadřazené lokace" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Název dílu (citlivost písmen na malá a velká písmena)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Název dílu obsahuje (citlivost písmen na malá a velká písmena)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Název dílu (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "IPN dílu (citlivost písmen na malá a velká písmena)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "IPN dílu obsahuje (citlivost písmen na malá a velká písmena)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "IPN dílu (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Minimální zásoby" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Maximální zásoby" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Kód stavu" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Externí umístění" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Spotřebováno výrobním příkazem" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Nainstalováno v jiné skladové položce" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Strom dílů" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Aktualizováno před" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Aktualizováno po" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Inventura před" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Inventura po" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Datum expirace ped" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Datum expirace po" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Zastaralé" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Zadejte PK skladové položky, abyste vyloučili danou položku a všechny její potomky" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "Umístění kaskády" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "Pokud je pravda, uveďte předměty v podružených místech dané lokace" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Filtrovat podle numberické ID lokace nebo doslovného 'null'" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Množství je povinné" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Platný díl musí být dodán" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Daný dodavatelský díl neexistuje" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Dodavatelský díl na nastavenou velikost balení, ale znak use_pack_size není nastaven" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Sériové čísla nemohou být zadána pro díl bez sledovanosti" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "Zahrnout nainstalované" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "Pokud je pravda, zahrne výslekdy testů pro předměty nainstalované pod danou skladovou položku" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "Filtrovat podle číselného ID položky skladu" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "Skladová položka s ID {id} neexistuje" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "Zahrnout varianty" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "Datum po" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "Datum před" @@ -8441,7 +8506,7 @@ msgstr "Typy skladových umístění" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Výchozí ikona pro všechny lokace které nemají ikonu nastavenou (volitelné)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Skladové umístění" @@ -8449,11 +8514,11 @@ msgstr "Skladové umístění" msgid "Stock Locations" msgstr "Skladová umístění" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Správce" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Vybrat vlastníka" @@ -8481,274 +8546,274 @@ msgstr "Typ tohoto skladového umístění" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Toto skladové umístění nemůžete označit jako strukturální, protože již obsahuje skladové položky!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field} neexistuje" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Díl musí být zadán" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Skladové položky nelze umístit do strukturálních skladových umístění!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Nelze vytvořit skladovou položku pro virtuální díl" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Typ dílu ('{self.supplier_part.part}') musí být {self.part}" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Množství musí být 1 pro položku se sériovým číslem" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Sériové číslo nemůže být nastaveno, když množství je více než 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Položka nemůže patřit sama sobě" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Předmět musí mít stavební referenci pokud is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Stavební reference neukazuje na stejný objekt dílu" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Nadřazená skladová položka" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Základní díl" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Vyberte odpovídající díl dodavatele pro tuto skladovou položku" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Kde se tato skladová položka nachází?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Balení, ve kterém je tato skladová položka uložena" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Instalováno v" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Je tato položka nainstalována v jiné položce?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Sériové číslo pro tuto položku" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Kód šarže pro tuto skladovou položku" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Mnižství" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Zdrojová sestavení" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Postavit pro tuto skladovou položku" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Použito v" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Výrobní příkaz, který spotřeboval tuto skladovou položku" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Zdrojová nákupní objednávka" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Nákupní objednávka pro tuto skladovou položku" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Cílová prodejní objednávka" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Datum expirace pro skladovou položku. Po tomto datu bude položka brána jako expirovaná" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Odstranit po vyčerpání" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Odstranit tuto skladovou položku po vyčerpání zásob" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Jednotková kupní cena v okamžiku nákupu" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Převedeno na díl" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "Množství přesahuje dostupné zásoby" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Díl není nastaven jako sledovatelný" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Množstvní musí být celé číslo" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Množství nesmí překročit dostupné množství zásob ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Sériové čísla musí být poskytnuta jako seznam" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Množství neodpovídá sériovým číslům" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "Nelze přiřadit zásoby ke strukturálnímu umístění" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Testovací šablona neexistuje" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Skladová položka byla přidělena prodejní objednávce" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Skladová položka je nainstalována v jiné položce" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Skladová položka obsahuje jiné položky" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Skladová položka byla přidělena zákazníkovi" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Skladová položka je ve výrobě" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Serializované zásoby nelze sloučit" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Duplicitní skladové položky" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Skladové položky musí odkazovat na stejný díl" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Skladové položky musí odkazovat na stejný díl dodavatele" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Kódy stavu zásob se musí shodovat" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Zásobová položka nemůže být přesunuta, protože není skladem" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Sledování skladových položek" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Poznámky k záznamu" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Výsledek testu skladové položky" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Pro tuto zkoušku musí být uvedena hodnota" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Pro tento test musí být nahrána příloha" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Neplatná hodnota pro tento test" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Výsledek testu" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Výstupní hodnota testu" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Příloha výsledků testu" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Poznámky testu" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "Testovací stanice" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Identifikátor testovací stanice kde byl test proveden" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "Začátek" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Čas začátku testu" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "Ukončeno" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Čas dokončení testu" @@ -8792,246 +8857,246 @@ msgstr "Vyberte díl, pro který se má vygenerovat sériové číslo" msgid "Quantity of serial numbers to generate" msgstr "Množství sériových čísel k vygenerování" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "Testovací šablona pro tento výsledek" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "Pro tento díl nebyl nalezen žádný odpovídající test" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "ID šablony nebo název testu musí být uveden" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "Čas ukončení testu nesmí být dřívější než čas zahájení testu" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Nadřazená položka" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "Nadřazená skladová položka" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Použít velikost balení při přidání: definované množství je počet v balení" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "Použít velikost balení" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Zadejte sériová čísla pro nové položky" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Číslo dílu dodavatele" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Expirováno" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Podřízené položky" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "Sledování položky" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Nákupní cena této skladové položky za jednotku nebo balení" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Zadejte počet skladových položek k serializaci" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "Nebyla poskytnuta žádná skladová položka" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Množství nesmí překročit dostupné skladové množství ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Cílové skladové umístění" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "K tomuto dílu nelze přiřadit sériová čísla" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Sériová čísla již existují" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Vyberte skladovou položku k instalaci" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Množství k instalaci" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Zadejte množství položek k instalaci" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Přidat poznámku o transakci (volitelné)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "Množství k instalaci musí být alespoň 1" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Skladová položka je nedostupná" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "Vybraný díl není v kusovníku" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "Množství k instalaci nesmí překročit dostupné množství" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Cílové umístění pro odinstalovanou položku" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Vyberte díl pro převedení do skladové položky" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "Vybraný díl není platnou volbou pro převod" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Nelze převést skladovou položku s přiřazeným dílem dodavetele" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Stavový kód skladové položky" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Vybrat skladové položky pro změnu stavu" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Nejsou vybrány žádné skladové položky" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Podumístění" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "Nadřazené skladové umístění" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Díl musí být prodejný" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "Položka je přidělena prodejní objednávce" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "Položka je přidělena výrobnímu příkazu" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Zákazník, kterému mají být přiděleny skladové položky" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "Vybraná společnost není zákazník" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Poznámky ke skladové položce" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Musí být poskytnut seznam skladových položek" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Poznámky ke sloučení skladových položek" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Povolit neodpovídající dodavatele" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Povolit sloučení skladových položek s různými díly dodavatele" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Povolit neodpovídající stav" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Povolit sloučení skladových položek s různými stavovými kódy" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Musí být poskytnuty alespoň dvě skladové položky" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Beze změny" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Hodnota primárního klíče skladové položky" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "Skladová položka není skladem" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "Skladová položka je již na skladě" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "Množství nesmí být záporné" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Poznámky ke skladovací transakci" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "Sloučit do existující zásoby" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "Sloučit vrácené položky do existujích položek, pokud je to možné" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "Další sériové číslo" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "Předchozí sériové číslo" @@ -9537,59 +9602,75 @@ msgstr "Příjmení uživatele" msgid "Email address of the user" msgstr "Emailová adresa uživatele" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personál" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Má tento uživatel oprávnění personálu" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Super-uživatel" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Je tento uživatel superuživatel" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Je tento uživatelský účet aktivní" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "Pouze superuživatel může toto pole upravit" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "Heslo" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "Heslo uživatele" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "Přepsat varování" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "Přepsat varování o pravidlech pro heslo" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "Nemáte oprávnění k vytváření uživatelů" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Váš účet byl vytvořen." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Pro přihlášení použijte funkci obnovení hesla" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Vítejte v InvenTree" diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po index 25e9c3126a..7b807d5631 100644 --- a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 20:21\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API endpoint ikke fundet" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Liste af elementer eller filtre skal angives for bulkdrift" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Elementer skal angives som en liste" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Alle filtre må kun bruges med sand" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Ingen data angivet" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Dette felt skal være unikt." -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Bruger har ikke tilladelse til at se denne model" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Kunne ikke konvertere {original} til {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Ugyldigt antal angivet" @@ -112,13 +104,13 @@ msgstr "Angiv dato" msgid "Invalid decimal value" msgstr "Ugyldig decimalværdi" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Bemærkninger" @@ -131,75 +123,91 @@ msgstr "Værdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Den angivne værdi matcher ikke det påkrævede mønster: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Kan ikke serialisere mere end 1000 elementer på én gang" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Serienummer streng er tom" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Duplikeret serienummer" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Ugyldig gruppe: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Ingen serienumre fundet" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Antal unikke serienumre ({n}) skal matche antal ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-tags fra denne værdi" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Data indeholder forbudt markdown indhold" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Forbindelsesfejl" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serveren svarede med ugyldig statuskode" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Der opstod en fejl" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarede med ugyldig Content-Length værdi" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Billedstørrelsen er for stor" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Billeddownload overskred maksimumstørrelsen" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Fjernserver returnerede tomt svar" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Angivet URL er ikke en gyldig billedfil" @@ -207,11 +215,11 @@ msgstr "Angivet URL er ikke en gyldig billedfil" msgid "Log in to the app" msgstr "Log ind på appen" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "Referencenummer er for stort" msgid "Invalid choice" msgstr "Ugyldigt valg" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Beskrivelse" msgid "Description (optional)" msgstr "Beskrivelse (valgfri)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Sti" @@ -313,75 +321,66 @@ msgstr "Unik hash af stregkode data" msgid "Existing barcode found" msgstr "Eksisterende stregkode fundet" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverfejl" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "En fejl blev logget af serveren." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Billede" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Skal være et gyldigt tal" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Vælg valuta fra tilgængelige muligheder" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "Dette felt kan ikke være tomt." -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Ugyldig værdi" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Eksternt billede" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL til ekstern billedfil" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Download af billeder fra ekstern URL er ikke aktiveret" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Kinesisk (forenklet)" msgid "Chinese (Traditional)" msgstr "Kinesisk (traditionelt)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Opdatering tilgængelig" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "En opdatering til InvenTree er tilgængelig" @@ -553,30 +552,30 @@ msgstr "Ugyldig fysisk enhed" msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Ordre status" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Overordnet produktion" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategori" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Tildelt til Mig" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Tildelt Til" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Oprettet før" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Oprettet efter" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Har startdato" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Start dato før" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Start dato efter" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Produktion skal anulleres, før den kan slettes" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Forbrugsvare" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Valgfri" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Sporet" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Ordre Udestående" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Allokeret" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tilgængelig" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Produktionsordre" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokation" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Produktionsordrer" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Monteringens stykliste er ikke blevet valideret" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Ansvarlig bruger eller gruppe skal specificeres" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Byggeordre enhed kan ikke ændres" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Produktionsordre reference" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Produktionsordre reference" msgid "Reference" msgstr "Reference" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Vælg dele til produktion" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Salgsordrereference" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Kilde Lokation" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Vælg lokation for lager, som skal benyttes til denne produktion (lad feltet stå tomt for at benytte vilkårligt lager)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Ekstern Byg" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Denne byggeordre er gennemført eksternt" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Destinations Placering" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Vælg placering, hvor de færdige elementer vil blive gemt" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Produktions antal" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Antal lagervarer som skal produceres" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Afsluttede elementer" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Antal lagervarer som er færdiggjort" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Produktions Status" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Produktions statuskode" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Batch Kode" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Batch kode til dette produktions output" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Oprettelsesdato" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Planlagt startdato for denne byggeordre" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Projekteret afslutningsdato" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Dato for afslutning" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "udført af" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Udstedt af" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Bruger som udstedte denne byggeordre" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Bruger eller gruppe ansvarlig for denne byggeordre" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Ekstern link" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link til ekstern URL" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Bygge Prioritet" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioritet af denne byggeordre" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Projektkode" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Projektkode for denne byggeordre" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bygningsordre {build} er fuldført" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "En byggeordre er fuldført" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Antal" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Lagervarer" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Kilde lagervare" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Del Navn" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Indtast serienumre for bygge output" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk alloker serienumre" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienumre findes allerede eller er ugyldige" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Ikke tilladt" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Accepter som forbrugt af denne byggeordre" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Accepter Ikke tildelt" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accepter at lagervarer ikke er fuldt tildelt til denne byggeordre" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Accepter ufuldført" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Bygge linje" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Varen skal være på lager" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgængeligt antal ({q}) overskredet" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Stykliste Reference" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "Stykliste del ID" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Stykliste Del Navn" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Byg" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Leverandør Del" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Tildelt Antal" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Stykliste Del" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "I Produktion" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Ekstern Lager" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Tilgængelig Lager" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "På Hold" msgid "Cancelled" msgstr "Annulleret" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Fuldført" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "Ingen plugin" msgid "Project Code Label" msgstr "Projekt Kode Label" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Opdateret" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Unik projekt kode" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Projektbeskrivelse" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Værdien skal være en boolsk værdi" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Værdi skal være et heltalsværdi" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Skal være et gyldigt tal" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "Værdien består ikke valideringskontrol" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Nøglestrengen skal være unik" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Bruger" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Pris" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktiv" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token for adgang" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Hemmelighed" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "Besked ID" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Vært" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Vært, hvorfra denne meddelelse blev modtaget" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Overskrift" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Overskrift for denne besked" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Id" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Titel" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Tilknytning" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Publiceret" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Forfatter" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Opsummering" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Læs" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Blev dette nyhedselement læst?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Billedfil" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Vedhæftning" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Manglende fil" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Manglende eksternt link" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Vælg fil, der skal vedhæftes" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Filstørrelse" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Filstørrelse i bytes" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Værdi" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "Numerisk værdi, der vil blive gemt i modeldatabasen" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Label" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Farve" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Farve der vil blive vist på frontend" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Model" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Låst" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Parameter skabelon navn skal være unikt" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Stregkode Scan" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Stregkode data" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "Sendt" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "Fejlede" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Leveret" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Bekræftet" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "Indkommende" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "Udgående" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Intet Svar" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "Spor Levering" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "Spor Læst" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "Spor Klik" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identifikator for denne meddelelse (leveres muligvis af et eksternt system)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "Tråd ID" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "E-mail Tråd" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "E-mail Tråde" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Nøgle" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Filnavn" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Firmanavn" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Standardvaluta" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Liste over understøttede valutakoder" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Valuta Opdaterings Interval" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Maksimum tilladte downloadstørrelse for fjernbillede" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Afsendt" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "Refusion" msgid "Reject" msgstr "Afvis" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "Efternavn på brugeren" msgid "Email address of the user" msgstr "Email adresse på brugeren" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personale" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Har denne bruger personale tilladelser" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Superbruger" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Er denne bruger en superbruger" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Er denne brugerkonto aktiv" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "Kun en superbruger kan justere dette felt" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "Adgangskode" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "Brugers adgangskode" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "Tilsidesæt advarsel" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "Tilsidesæt advarslen om adgangskode regler" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "Du har ikke tilladelse til at oprette brugere" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Din konto er oprettet." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Benyt funktionen til nulstilling af adgangskode til at logge ind" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Velkommen til InvenTree" diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po index 7bb5550c7b..d5aa83b831 100644 --- a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 20:21\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API-Endpunkt nicht gefunden" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Liste der Elemente oder Filter muss für den Massenbetrieb zur Verfügung stehen" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Elemente müssen als Liste angegeben werden" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Ungültige Artikelliste angegeben" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Filter müssen als Dict gegeben sein" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Ungültige Filter angegeben" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Alle Filter dürfen nur mit true verwendet werden" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Keine Gegenstände erfüllen die vorgegebenen Kriterien" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Keine Daten verfügbar" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Dieses Feld muss eindeutig sein." -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Benutzer hat keine Berechtigung, dieses Modell anzuzeigen" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Konnte {original} nicht in {unit} umwandeln" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" @@ -112,13 +104,13 @@ msgstr "Datum eingeben" msgid "Invalid decimal value" msgstr "Ungültiger Dezimalwert" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Notizen" @@ -131,75 +123,91 @@ msgstr "Wert '{name}' hält das Musterformat nicht ein" msgid "Provided value does not match required pattern: " msgstr "Angegebener Wert entspricht nicht dem benötigten Muster: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Kann nicht mehr als 1000 Elemente auf einmal serialisieren" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Duplizierter Seriennummer" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Ungültige Gruppe: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Gruppenbereich {group} überschreitet die zulässige Menge ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Anzahl der eindeutigen Seriennummern ({n}) muss mit der Anzahl ({q}) übereinstimmen" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Entferne HTML-Tags von diesem Wert" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Daten enthalten verbotene Markdown-Inhalte" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Verbindungsfehler" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Server antwortete mit ungültigem Statuscode" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Ausnahme aufgetreten" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Server antwortete mit ungültigem Wert für die Inhaltslänge" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Bild ist zu groß" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Bilddownload überschreitet maximale Größe" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Remote-Server gab leere Antwort zurück" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Angegebene URL ist kein gültiges Bild" @@ -207,11 +215,11 @@ msgstr "Angegebene URL ist kein gültiges Bild" msgid "Log in to the app" msgstr "Bei der App anmelden" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Sie müssen die Zwei-Faktor-Authentifizierung aktivieren, bevor Sie etwas tun können." @@ -259,18 +267,18 @@ msgstr "Referenznummer ist zu groß" msgid "Invalid choice" msgstr "Ungültige Auswahl" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Name" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Beschreibung" msgid "Description (optional)" msgstr "Beschreibung (optional)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Pfad" @@ -313,75 +321,66 @@ msgstr "Eindeutiger Hash der Barcode-Daten" msgid "Existing barcode found" msgstr "Bestehender Barcode gefunden" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Aufgabe fehlgeschlagen" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Hintergrundarbeiteraufgabe '{f}' fehlgeschlagen nach {n} Versuchen" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverfehler" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Ein Fehler wurde vom Server protokolliert." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Bild" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Währung" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Währung aus verfügbaren Optionen auswählen" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "Dieses Feld darf nicht leer sein." -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Ungültiger Wert" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Grafiken aus externen Quellen" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL der Remote-Bilddatei" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Das Herunterladen von Bildern von Remote-URLs ist nicht aktiviert" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Fehler beim Herunterladen des Bildes von entfernter URL" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "Content type stimmt nicht mit der benötigten Mixin-Klasse überein" @@ -537,11 +536,11 @@ msgstr "Chinesisch (Vereinfacht)" msgid "Chinese (Traditional)" msgstr "Chinesisch (Traditionell)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Update verfügbar" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "Ein Update für InvenTree ist verfügbar" @@ -553,30 +552,30 @@ msgstr "Ungültige physikalische Einheit" msgid "Not a valid currency code" msgstr "Kein gültiger Währungscode" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Bestellstatus" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Eltern-Bauauftrag" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Varianten einschließen" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Varianten einschließen" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Varianten einschließen" msgid "Part" msgstr "Teil" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategorie" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Vorgänger-Build" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Mir zugewiesen" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Zugewiesen zu" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Erstellt vor" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Erstellt nach" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Hat Startdatum" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Gültigkeitsdauer vor" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Gültigkeitsdauer nach" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "geplantes Bestelldatum" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Zieldatum vor" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Zieldatum nach" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Abgeschlossen vor" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Abgeschlossen nach" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Baum ausschließen" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Optional" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Baugruppe" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Nachverfolgt" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Prüfbar" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Offene Bestellung" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Zugeordnet" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Verbraucht" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Verfügbar" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Bestellt" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Bauauftrag" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lagerort" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Bauprodukt" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Bauaufträge" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Die Stückliste wurde noch nicht kontrolliert" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Baureihenfolge kann nicht für ein inaktives Teil erstellt werden" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Baureihenfolge kann nicht für ein inaktives Teil erstellt werden" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Verantwortlicher Benutzer oder Gruppe muss angegeben werden" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Teil in Bauauftrag kann nicht geändert werden" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Zieldatum muss nach dem Startdatum liegen" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Bauauftragsreferenz" msgid "Reference" msgstr "Referenz" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Kurze Beschreibung des Baus (optional)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Teil für den Bauauftrag wählen" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Auftrag Referenz" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Quell-Lagerort" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Entnahme-Lagerort für diesen Bauauftrag wählen (oder leer lassen für einen beliebigen Lagerort)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Ziel-Lagerort" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Lagerort an dem fertige Objekte gelagert werden auswählen" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Bau-Anzahl" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Anzahl der zu bauenden Lagerartikel" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Fertiggestellte Teile" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Anzahl der fertigen Lagerartikel" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Bauauftrags-Status" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Erstelldatum" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Startdatum des Bauauftrags" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Geplantes Startdatum des Bauauftrags" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "geplantes Fertigstellungsdatum" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Fertigstellungsdatum" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "Fertiggestellt von" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Aufgegeben von" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Verantwortlicher Benutzer" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Benutzer oder Gruppe verantwortlich für diesen Bauauftrag" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Externer Link" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link zu einer externen URL" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Bauauftrags-Priorität" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Priorität dieses Bauauftrags" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Projektcode" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Projektcode für diesen Auftrag" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Fehler beim Abladen der Aufgabe, um die Build-Allokation abzuschließen" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bauauftrag {build} wurde fertiggestellt" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Ein Bauauftrag wurde fertiggestellt" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Seriennummern müssen für nachverfolgbare Teile angegeben werden" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "kein Endprodukt angegeben" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Endprodukt bereits hergstellt" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Menge kann nicht größer als die Ausgangsmenge sein" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Build Ausgabe {serial} hat nicht alle erforderlichen Tests bestanden" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Bauauftragsposition" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Objekt bauen" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Objekt bauen" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Anzahl" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Erforderliche Menge für Auftrag" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Bauauftragsposition muss ein Endprodukt festlegen, da der übergeordnete Teil verfolgbar ist" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Zugewiesene Menge ({q}) darf nicht verfügbare Menge ({a}) übersteigen" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Lagerartikel" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Installiere in" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Ziel-Lagerartikel" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Name des Teils" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Endprodukt" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Dieses Endprodukt wurde bereits fertiggestellt" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: build/serializers.py:339 +#: build/serializers.py:337 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:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Seriennummer" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses Endprodukt eingeben" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Lagerort für Bauprodukt" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Seriennummern automatisch zuweisen" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Eine Liste von Endprodukten muss angegeben werden" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Lagerort für ausgemusterte Ausgänge" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Zuteilungen verwerfen" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Bestandszuteilung für ausgemusterte Endprodukte verwerfen" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Grund für das Verwerfen des Bauauftrages/der Bauaufträge" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Unvollständige Zuweisung akzeptieren" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Endprodukte fertigstellen, auch wenn Bestand nicht fertig zugewiesen wurde" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Zugewiesen Bestand verbrauchen" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Verbrauche alle Bestände, die diesem Bauauftrag bereits zugewiesen wurden" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Unfertige Endprodukte entfernen" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Lösche alle noch nicht abgeschlossenen Endprodukte" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Nicht erlaubt" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Als von diesem Bauauftrag verbraucht setzen" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Bestandszuordnung vor dem Abschluss dieses Bauauftrags freigeben" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Überbelegter Lagerbestand" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Wie sollen zusätzliche Lagerbestandteile, die dem Bauauftrag zugewiesen wurden, behandelt werden" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Der Bestand einiger Lagerartikel ist überbelegt" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Nicht zugewiesene akzeptieren" -#: build/serializers.py:777 +#: build/serializers.py:775 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:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" -#: build/serializers.py:795 +#: build/serializers.py:793 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:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Bauauftrag hat unvollständige Aufbauten" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Bauauftragsposition" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Endprodukt" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Bauauftragspositionsartikel" -#: build/serializers.py:928 +#: build/serializers.py:926 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:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" -#: build/serializers.py:993 +#: build/serializers.py:991 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:1001 +#: build/serializers.py:999 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:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" -#: build/serializers.py:1089 +#: build/serializers.py:1087 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:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Lagerort ausschließen" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Lagerartikel vom ausgewählten Ort ausschließen" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Wechselbares Lagerbestand" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagerartikel an mehreren Standorten können austauschbar verwendet werden" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Ersatzbestand" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Zuordnung von Ersatzteilen erlauben" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Optionale Positionen" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "Alle Artikel" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "Unverfolgte Artikel" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "Verfolgte Artikel" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "Item-Typ" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "Elementtyp zur automatischen Zuweisung auswählen" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Fehler beim Starten der automatischen Zuweisung" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Stücklisten-Referenz" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "Stückliste Teil-ID" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Stückliste Teil-Name" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Zusammenbau" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Zuliefererteil" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Zugewiesene Menge" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Teilkategorienname" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Nachverfolgbar" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Vererbt" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Varianten zulassen" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "In Produktion" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Geplant zum Erstellen" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Externes Lager" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Verfügbarer Bestand" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Verfügbares Ersatzmaterial" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Verfügbarer Varianten Lagerbestand" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Verbrauchsmenge überschreitet die zugewiesene Menge" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Optionale Notizen für den Bestandsverbrauch" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Dupliziere Bauauftrag Artikelzuordnung" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Mindestens ein Element oder eine Zeile muss angegeben werden" @@ -1495,43 +1494,43 @@ msgstr "Pausiert" msgid "Cancelled" msgstr "Storniert" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Fertig" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Bestand für Bauauftrag erforderlich" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Bauauftrag {build} erfordert zusätzlichen Bestand" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Überfälliger Bauauftrag" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Bauauftrag {bo} ist jetzt überfällig" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "Link" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "Datei" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Benutzer hat keine Berechtigung zum Löschen der Anhänge" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Benutzer hat keine Berechtigung zum Löschen des Anhangs" @@ -1555,794 +1554,794 @@ msgstr "Kein Plugin" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Aktualisiert" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Zeitstempel der letzten Aktualisierung" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Eindeutiger Projektcode" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Projektbeschreibung" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Benutzer oder Gruppe verantwortlich für dieses Projekt" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Einstellungs-Wert" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Wert ist keine gültige Option" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Wahrheitswert erforderlich" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Nur Ganzzahl eingeben" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Benutzer" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Preis" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Endpunkt" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Endpunkt, an dem dieser Webhook empfangen wird" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Name für diesen Webhook" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktiv" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Ist dieser Webhook aktiv" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token für Zugang" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Geheimnis" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Shared Secret für HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "Nachrichten-ID" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Eindeutige Kennung für diese Nachricht" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Host" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Host von dem diese Nachricht empfangen wurde" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Kopfzeile" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Header dieser Nachricht" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Body" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Body dieser Nachricht" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Endpunkt, über den diese Nachricht empfangen wurde" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Bearbeitet" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Wurde die Arbeit an dieser Nachricht abgeschlossen?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "ID" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Titel" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Veröffentlicht" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Autor" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Zusammenfassung" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Gelesen" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Wurde diese Nachricht gelesen?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Bilddatei" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Benutzerdefinierte Einheit" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Einheitensymbol muss eindeutig sein" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Einheitsname muss eine gültige Kennung sein" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Einheitsname" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Optionales Einheitssymbol" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definition" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Einheitsdefinition" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Anhang" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Fehlende Datei" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Fehlender externer Link" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Modelltyp" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Datei zum Anhängen auswählen" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Upload Datum" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Datum der hochgeladenen Datei" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Dateigröße" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Dateigröße in Bytes" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Ungültiger Modelltyp für Anhang angegeben" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Wert" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Name des Bundeslandes" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Bezeichnung" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Bezeichnung, die im Frontend angezeigt wird" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Farbe" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Farbe, die im Frontend angezeigt wird" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "Name muss sich von den Namen des Referenzstatus unterscheiden" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Auswahlliste" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Auswahllisten" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Name der Auswahlliste" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Beschreibung der Auswahlliste" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Gesperrt" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Ist diese Auswahlliste gesperrt?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Kann diese Auswahlliste benutzt werden?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Standardeintrag" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Erstellt" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Zuletzt aktualisiert" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Checkbox-Parameter können keine Einheiten haben" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox-Parameter können keine Auswahl haben" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Auswahl muss einzigartig sein" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Name des Parameters" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Einheiten" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Physikalische Einheiten für diesen Parameter" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Parameter-Beschreibung" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Checkbox" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Ist dieser Parameter eine Checkbox?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Auswahlmöglichkeiten" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gültige Optionen für diesen Parameter (durch Kommas getrennt)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Aktiviert" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Ungültige Auswahl für Parameterwert" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Vorlage" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Wert" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Parameter Wert" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Notiz" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Optionales Notizfeld" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Barcode Scan" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Zeitstempel" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Kontext" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Ergebnis" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "Angekündigt" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "Gesendet" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "Fehlgeschlagen" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Zugestellt" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Bestätigt" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "Eingehend" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "Ausgehend" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Keine Rückmeldung" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Schlüssel" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} storniert" msgid "A order that is assigned to you was canceled" msgstr "Eine Bestellung, die Ihnen zugewiesen war, wurde storniert" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Artikel erhalten" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Wird ausgeführt" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Anstehende Aufgaben" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Geplante Aufgaben" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Fehlgeschlagene Aufgaben" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "Aufgabe-ID" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Eindeutige Aufgaben-ID" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Sperren" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Sperrzeit" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Aufgabenname" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Funktion" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Funktionsname" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Parameter" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Aufgaben-Parameter" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Schlüsselwort Parameter" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Schlüsselwort Parameter für Aufgaben" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Dateiname" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Modelltyp" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Benutzer hat keine Berechtigung, Anhänge für dieses Modell zu erstellen oder zu bearbeiten" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Keine Gruppe" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Seiten-URL ist durch die Konfiguration gesperrt" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Neustart erforderlich" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Eine Einstellung wurde geändert, die einen Neustart des Servers erfordert" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Ausstehende Migrationen" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Anzahl der ausstehenden Datenbankmigrationen" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Name der Serverinstanz" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Kurze Beschreibung der Instanz" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Name der Instanz verwenden" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Den Namen der Instanz in der Titelleiste verwenden" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Anzeige von `Über` einschränken" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Zeige das `Über` Fenster nur Administratoren" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Firmenname" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "interner Firmenname" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Basis-URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Basis-URL für dieses Instanz" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Standardwährung" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Wählen Sie die Basiswährung für Preisberechnungen aus" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Verfügbare Währungen" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Liste der unterstützten Währungskürzel" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Währungsaktualisierungsintervall" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Wie oft Wechselkurse aktualisiert werden sollen (auf Null zum Deaktivieren setzen)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "Tage" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Währungs-Aktualisierungs-Plugin" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Zu verwendendes Währungs-Aktualisierungs-Plugin" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Von URL herunterladen" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Herunterladen von externen Bildern und Dateien von URLs erlaubt" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Download-Größenlimit" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Maximal zulässige Größe für heruntergeladene Bilder" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "Benutzer-Agent zum Herunterladen von Daten" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Überschreiben des Benutzer-Agenten, der verwendet wird, um Bilder und Dateien von externer Servern herunterzuladen (leer für die Standardeinstellung)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Strenge URL-Prüfung" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Erfordert die Schema-Spezifikation bei der Validierung von URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Prüfungsintervall aktualisieren" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Wie oft soll nach Updates gesucht werden? (auf 0 setzen zum Deaktivieren)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Automatische Sicherung" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Automatische Sicherung der Datenbank- und Mediendateien aktivieren" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Intervall für automatische Sicherung" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Anzahl der Tage zwischen automatischen Sicherungen" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Aufgabenlöschinterval" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Ergebnisse der Hintergrundaufgabe werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Löschintervall für Fehlerprotokolle" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Fehlerprotokolle werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Löschintervall für Benachrichtigungen" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Benutzerbenachrichtigungen werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Bacode-Feature verwenden" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Barcode-Scanner Unterstützung im Webinterface aktivieren" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Barcode-Eingabeverzögerung" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Verzögerungszeit bei Barcode-Eingabe" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Barcode Webcam-Unterstützung" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode-Scannen über Webcam im Browser erlauben" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Artikelrevisionen" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Revisions-Feld für Artikel aktivieren" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Löschen aus Baugruppe erlauben" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Erlaube das Löschen von Teilen, die in einer Baugruppe verwendet werden" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "RegEx Muster für die Zuordnung von Teil-IPN" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Ändern von IPN erlaubt" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Ändern der IPN während des Bearbeiten eines Teils erlaubt" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Teil-Stückliste kopieren" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Teil-Parameter kopieren" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Parameter-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Teil-Testdaten kopieren" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Test-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Kategorie-Parametervorlage kopieren" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponente" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Kaufbar" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Verkäuflich" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Artikel sind grundsätzlich verkaufbar" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtuell" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Teile sind grundsätzlich virtuell" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Verwandte Teile anzeigen" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Verwandte Teile eines Teils anzeigen" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Initialer Lagerbestand" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Erstellen von Lagerbestand beim Hinzufügen eines neuen Teils erlauben" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Initiale Lieferantendaten" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Erstellen von Lieferantendaten beim Hinzufügen eines neuen Teils erlauben" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Anzeigeformat für Teilenamen" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Format für den Namen eines Teiles" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Standardsymbol der Teilkategorie" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Standardsymbol der Teilkategorie (leer bedeutet kein Symbol)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Dezimalstellen für minimalen Preis" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mindestanzahl der Dezimalstellen bei der Darstellung der Preisdaten" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Dezimalstellen für maximalen Preis" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximale Anzahl der Dezimalstellen bei der Darstellung der Preisdaten" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Zulieferer-Preise verwenden" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Lieferanten-Staffelpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Kaufverlauf überschreiben" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische Bestellungspreise überschreiben die Lieferanten-Staffelpreise" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Lagerartikel-Preis verwenden" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Preise aus manuell eingegebenen Lagerdaten für Preisberechnungen verwenden" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Lagerartikelpreis Alter" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Lagerartikel, die älter als diese Anzahl an Tagen sind, von der Preisberechnung ausschließen" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Variantenpreise verwenden" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Nur aktive Varianten" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Nur aktive Variantenteile zur Berechnung der Variantenbepreisung verwenden" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Intervall für Neuberechnung von Preisen" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Anzahl der Tage bis die Teile-Preisberechnungen automatisch aktualisiert werden" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Interne Preise" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Interne Preise für Teile aktivieren" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Interne Preisüberschreibung" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Falls verfügbar, überschreiben interne Preise Preispannenberechnungen" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Labeldruck aktivieren" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Labeldruck über die Website aktivieren" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "Label Bild DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI-Auflösung bei der Erstellung von Bilddateien für Etikettendruck-Plugins" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Berichte aktivieren" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Berichterstellung aktivieren" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Entwickler-Modus" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Berichte im Entwickler-Modus generieren (als HTML)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Berichtsfehler protokollieren" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Fehler, die beim Erstellen von Berichten auftreten, protokollieren" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Seitengröße" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Standardseitenformat für PDF-Bericht" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Parameter Einheiten durchsetzen" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Wenn Einheiten angegeben werden, müssen die Parameterwerte mit den angegebenen Einheiten übereinstimmen" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Global einzigartige Seriennummern" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Seriennummern für Lagerartikel müssen global eindeutig sein" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Erschöpften Lagerartikel löschen" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Legt das Standardverhalten fest, wenn ein Lagerartikel aufgebraucht ist" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Losnummer Vorlage" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Vorlage für die Generierung von Standard-Losnummern für Lagerbestände" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Bestands-Ablauf" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Ablaufen von Bestand ermöglichen" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Abgelaufenen Bestand verkaufen" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Verkauf von abgelaufenem Bestand erlaubt" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Bestands-Stehzeit" -#: common/setting/system.py:718 +#: common/setting/system.py:727 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/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Abgelaufenen Bestand verbauen" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Verbauen von abgelaufenen Bestand erlaubt" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Bestands-Eigentümerkontrolle" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Eigentümerkontrolle für Lagerorte und Teile aktivieren" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Standardsymbol für Lagerort" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Standardsymbol für Lagerstandort (leer bedeutet kein Symbol)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Zeige installierte Lagerartikel" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Anzeige der installierten Lagerartikel in Bestandstabellen" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Prüfe BOM bei der Installation von Elementen" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Installierte Lagerbestandteile müssen im BOM für den übergeordneten Teil vorhanden sein" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Erlaube Verschieben von \"nicht auf Lager\" Bestand" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Lagerartikel, die nicht auf Lager sind, können zwischen Lagerstandorten übertragen werden" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Bauauftragsreferenz-Muster" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bauaufträge" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Verantwortlicher Besitzer erforderlich" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Jeder Bestellung muss ein verantwortlicher Besitzer zugewiesen werden" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Blockieren bis Test bestanden" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Verhindert die Fertigstellung bis alle erforderlichen Tests bestanden sind" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Rücksendungen aktivieren" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Aktivieren der Rücksendung-Funktion in der Benutzeroberfläche" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Referenz Muster für Rücksendungen" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Rücksendungen" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Abgeschlossene Rücksendungen bearbeiten" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Bearbeitung von Rücksendungen nach Abschluss erlauben" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Auftragsreferenz-Muster" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Aufträge" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Auftrag Standardsendung" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Erstelle eine Standardsendung für Aufträge" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Abgeschlossene Aufträge bearbeiten" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Bearbeitung von Aufträgen nach Versand oder Abschluss erlauben" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Versendete Bestellungen als abgeschlossen markieren" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Als versendet markierte Aufträge werden automatisch abgeschlossen und überspringen den Status \"Versandt\"" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Bestellungsreferenz-Muster" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bestellungen" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Abgeschlossene Einkaufsaufträge bearbeiten" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Bearbeitung von Einkaufsaufträgen nach Versand oder Abschluss erlauben" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Bestellungen automatisch abschließen" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Bestellung automatisch als abgeschlossen markieren, wenn der Empfang aller Artikel bestätigt wurde" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Passwort vergessen aktivieren" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Passwort-vergessen-Funktion auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Registrierung erlauben" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Selbstregistrierung für Benutzer auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "SSO aktivieren" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "SSO auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "SSO Selbstregistrierung aktivieren" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Selbstregistrierung über SSO für Benutzer auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "SSO Gruppensynchronisation aktivieren" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "SSO Gruppenschlüssel" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Email-Adresse erforderlich" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Benutzer müssen bei der Registrierung eine E-Mail angeben" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "SSO-Benutzer automatisch ausfüllen" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Benutzer-Details automatisch aus SSO-Konto ausfüllen" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "E-Mail zweimal" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Bei der Registrierung den Benutzer zweimal nach der E-Mail-Adresse fragen" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Passwort zweimal" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Bei der Registrierung den Benutzer zweimal nach dem Passwort fragen" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Erlaubte Domains" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Anmeldung auf bestimmte Domänen beschränken (kommagetrennt, beginnend mit @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Gruppe bei Registrierung" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "MFA erzwingen" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Benutzer müssen Multifaktor-Authentifizierung verwenden." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Plugins beim Start prüfen" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Beim Start überprüfen, ob alle Plugins installiert sind - Für Container aktivieren" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Nach Plugin-Aktualisierungen suchen" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Periodische Überprüfungen auf Updates für installierte Plugins aktivieren" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "URL-Integration aktivieren" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Plugins zum Hinzufügen von URLs aktivieren" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Navigations-Integration aktivieren" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Plugins zur Integration in die Navigation aktivieren" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "App-Integration aktivieren" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Plugins zum Hinzufügen von Apps aktivieren" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Terminplan-Integration aktivieren" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Geplante Aufgaben aktivieren" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Ereignis-Integration aktivieren" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Plugins ermöglichen auf interne Ereignisse zu reagieren" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Externe Standorte ausschließen" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Automatische Inventur-Periode" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Vollständige Namen von Benutzern anzeigen" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Vollständigen Namen von Benutzern anstatt Benutzername anzeigen" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Teststation-Daten aktivieren" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Teststation-Datenerfassung für Testergebnisse aktivieren" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "Teil ist aktiv" msgid "Manufacturer is Active" msgstr "Hersteller ist aktiv" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "Lieferantenteil ist aktiv" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "Internes Teil ist aktiv" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "Lieferant ist aktiv" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Hersteller" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Firmen" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Firmenbeschreibung" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Firmenbeschreibung" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Webseite" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Firmenwebsite Adresse/URL" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Kontakt-Tel." -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kontakt-Telefon" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontakt-Email" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Anlaufstelle" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Ist dieses Unternehmen aktiv?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Ist Kunde" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Verkaufen Sie Teile an diese Firma?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Ist Zulieferer" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Kaufen Sie Teile von dieser Firma?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Ist Hersteller" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Produziert diese Firma Teile?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Standard-Währung für diese Firma" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Adresse" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Adressen" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Firma auswählen" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Adresstitel" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Titel zur Beschreibung des Adresseintrages" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Primäre Adresse" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Als primäre Adresse festlegen" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Linie 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Adresszeile 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Linie 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Adresszeile 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Postleitzahl" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Stadt/Region" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Postleitzahl Stadt/Region" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Staat/Provinz" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Bundesland" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Land" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Adresse Land" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Versandnotizen" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notizen für Versandkurier" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Interne Versandnotizen" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Versandnotizen für interne Verwendung" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link zu Adressinformationen (extern)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Herstellerteil" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Basisteil" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Teil auswählen" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Hersteller auswählen" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Hersteller-Teilenummer" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "Externe URL für das Herstellerteil" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Teilbeschreibung des Herstellers" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Packeinheiten müssen mit den Basisteileinheiten kompatibel sein" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Packeinheiten müssen größer als Null sein" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Zulieferer" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Ist dieser Lieferantenteil aktiv?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Herstellerteil auswählen" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "Teil-URL des Zulieferers" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Verpackungen" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Teile-Verpackungen" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Packmenge" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Gesamtmenge, die in einer einzelnen Packung geliefert wird. Für Einzelstücke leer lassen." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "Vielfache" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Mehrere bestellen" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Verfügbare Menge von Lieferanten" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Verfügbarkeit aktualisiert" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Datum des letzten Updates der Verfügbarkeitsdaten" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "Standard-Währung für diesen Zulieferer" msgid "Company Name" msgstr "Firmenname" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Auf Lager" @@ -4452,43 +4459,43 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" #: importer/models.py:491 msgid "Field" -msgstr "" +msgstr "Feld" #: importer/models.py:493 msgid "Column" -msgstr "" +msgstr "Spalte" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Fehler" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Gültig" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "Anzahl der zu druckenden Kopien für jedes Label" msgid "Connected" msgstr "Verbunden" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Unbekannt" @@ -4598,7 +4605,7 @@ msgstr "Drucken" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "Warnung" #: machine/machine_types/label_printer.py:235 msgid "No media" @@ -4606,7 +4613,7 @@ msgstr "Keine Medien" #: machine/machine_types/label_printer.py:236 msgid "Paper jam" -msgstr "" +msgstr "Papierstau" #: machine/machine_types/label_printer.py:237 msgid "Disconnected" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Bestellreferenz" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Ausstehend" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Erstellt von" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Hat Preise" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Bestellung" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Bestellung abgeschlossen" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Internes Teil" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Bestellung ausstehend" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Fertig" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Bestellung" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Bestellung" msgid "Sales Order" msgstr "Auftrag" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Gesamtpreis" msgid "Total price for this order" msgstr "Gesamtpreis für diese Bestellung" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Auftragswährung" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Währung für diesen Auftrag (leer lassen, um Firmenstandard zu verwenden)" @@ -4851,718 +4870,742 @@ msgstr "Währung für diesen Auftrag (leer lassen, um Firmenstandard zu verwende msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Kontakt stimmt nicht mit der ausgewählten Firma überein" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Auftragsbeschreibung (optional)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Projektcode für diesen Auftrag auswählen" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Link auf externe Seite" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Zieldatum" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Geplantes Lieferdatum für Auftrag." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Aufgabedatum" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Datum an dem die Bestellung aufgegeben wurde" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Nutzer oder Gruppe der/die für diesen Auftrag zuständig ist/sind" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Ansprechpartner für diesen Auftrag" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Firmenadresse für diesen Auftrag" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Bestell-Referenz" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Bestellungs-Status" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Firma bei der die Teile bestellt werden" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Zulieferer-Referenz" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Zulieferer Bestellreferenz" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "Empfangen von" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Ziel-Lager" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Position stimmt nicht mit Kaufauftrag überein" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Anzahl muss eine positive Zahl sein" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kunde" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Kundenreferenz" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Bestellreferenz" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Versanddatum" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "Versand von" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "Bestellung ist bereits abgeschlossen" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "Bestellung ist bereits storniert" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Nur ein offener Auftrag kann als abgeschlossen markiert werden" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Auftrag kann nicht abgeschlossen werden, da unvollständige Sendungen vorhanden sind" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "Auftrag kann nicht abgeschlossen werden, da es unvollständige Positionen gibt" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Zieldatum für diesen Einzelposten (leer lassen, um das Zieldatum des Auftrags zu verwenden)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Positionsbeschreibung (optional)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Zusätzlicher Kontext für diese Zeile" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Stückpreis" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "Lieferantenteil muss mit Lieferant übereinstimmen" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Zuliefererteil" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Empfangen" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Preis" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Preis pro Einheit" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Nur verkaufbare Teile können einem Auftrag zugewiesen werden" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Verkaufspreis" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Stückverkaufspreis" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Versendet" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Versendete Menge" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Versanddatum" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Lieferdatum" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Versanddatum" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Kontrolliert von" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Sendung" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Sendungsnummer" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Sendungsverfolgungsnummer" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Informationen zur Sendungsverfolgung" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Rechnungsnummer" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Referenznummer für zugehörige Rechnung" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Sendung wurde bereits versandt" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Sendung hat keine zugewiesene Lagerartikel" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "Lagerartikel wurde nicht zugewiesen" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Kann Lagerartikel keiner Zeile mit einem anderen Teil hinzufügen" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Auftrag gehört nicht zu Sendung" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Sendung gehört nicht zu Auftrag" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Position" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Sendungsnummer-Referenz" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Position" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Lagerartikel für Zuordnung auswählen" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Rücksendungsreferenz" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Firma von der die Artikel zurückgeschickt werden" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Status der Rücksendung" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Artikel zur Rücksendung auswählen" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Empfangsdatum" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Ergebnis" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Ergebnis für dieses Zeilenelement" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Kosten für die Rückgabe oder Reparatur dieses Objektes" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Parameter kopieren" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Positionen" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Abgeschlossene Positionen" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Lieferant" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Erlaube das Schließen des Auftrags mit unvollständigen Positionen" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "Auftrag hat unvollständige Positionen" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "Der Auftrag ist nicht offen" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Automatische Preisgestaltung" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Kaufpreis automatisch basierend auf Lieferantenbestandsdaten berechnen" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Elemente zusammenfügen" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Zusammenführen von Elementen mit dem gleichen Teil, Ziel- und Zieldatum zu einem Zeilenelement" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "Lieferanten-Teilenummer" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Interne Teilenummer" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Zuliefererteil muss ausgewählt werden" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Bestellung muss angegeben sein" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Lieferant muss mit der Bestellung übereinstimmen" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Position" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Losnummer für eingehende Lagerartikel" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ablaufdatum" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Seriennummern für eingehende Lagerartikel" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Gescannter Barcode" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Abgeschlossene Sendungen" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Artikel der Bestellzeile zurücksenden" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Artikel entspricht nicht der Rücksendeschrift" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Artikel wurde bereits erhalten" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Artikel können nur bei laufenden Bestellungen empfangen werden" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Verkaufspreis-Währung" @@ -5598,146 +5641,146 @@ msgstr "Rückerstattung" msgid "Reject" msgstr "Ablehnen" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Überfällige Bestellung" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Bestellung {po} ist jetzt überfällig" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Überfälliger Auftrag" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Auftrag {so} ist jetzt überfällig" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Markiert" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Nach markierten Kategorien filtern" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Ebenen" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filter nach Kategorietiefe" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Oberste Ebene" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Mehrstufig" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Unterkategorien in gefilterte Ergebnisse einbeziehen" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Übergeordnetes" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Nach übergeordneter Kategorie filtern" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Unterkategorien in der angegebenen Kategorie ausschließen" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Ergebnisse" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Verwendet" @@ -5750,7 +5793,7 @@ msgstr "Teil-Kategorie" msgid "Part Categories" msgstr "Teil-Kategorien" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Standard-Lagerort" @@ -5778,7 +5821,7 @@ msgstr "Standard-Stichworte für Teile dieser Kategorie" msgid "Icon" msgstr "Symbol" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Symbol (optional)" @@ -5799,7 +5842,7 @@ msgstr "Standard-Wert" msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Teile" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Ein Lagerartikel mit dieser Seriennummer existiert bereits" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "Doppelte IPN in den Teil-Einstellungen nicht erlaubt" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Teil mit diesem Namen, IPN und Revision existiert bereits." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Strukturellen Teilekategorien können keine Teile zugewiesen werden!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Name des Teils" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Ist eine Vorlage" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Ist dieses Teil eine Vorlage?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Ist dieses Teil eine Variante eines anderen Teils?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Variante von" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Artikelbeschreibung (optional)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Schlüsselwörter" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Interne Produktnummer)" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Version" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" -msgstr "" +msgstr "Revision von" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimaler Bestand" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Bestand" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Maßeinheit für diesen Teil" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bauauftrag von anderen genutzt werden?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 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:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "Stückliste kontrolliert von" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "BOM Kontrolldatum" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Verantwortlicher Besitzer für dieses Teil" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Währung für die Berechnung der Preise im Cache" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Minimale Stücklisten Kosten" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Minimale Kosten für Teile" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Maximale Stücklisten Kosten" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Maximale Kosten für Teile" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Minimale Einkaufskosten" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Minimale historische Kaufkosten" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Maximale Einkaufskosten" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Maximale historische Einkaufskosten" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Minimaler interner Preis" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Minimale Kosten basierend auf den internen Staffelpreisen" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Maximaler interner Preis" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Maximale Kosten basierend auf internen Preisstaffeln" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Minimaler Lieferantenpreis" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Mindestpreis für Teil von externen Lieferanten" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Maximaler Lieferantenpreis" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Maximaler Preis für Teil von externen Lieferanten" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Minimale Variantenkosten" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Berechnete minimale Kosten für Variantenteile" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Maximale Variantenkosten" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Berechnete maximale Kosten für Variantenteile" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Minimale Kosten" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Mindestkosten überschreiben" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Maximale Kosten" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Maximale Kosten überschreiben" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Berechnete Mindestkosten" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Berechnete Maximalkosten" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Mindestverkaufspreis" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Mindestverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Maximaler Verkaufspreis" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Maximalverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Mindestverkaufskosten" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Minimaler historischer Verkaufspreis" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Maximale Verkaufskosten" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Maximaler historischer Verkaufspreis" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Teil für die Inventur" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Stückzahl" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Anzahl einzelner Bestandseinträge zum Zeitpunkt der Inventur" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Insgesamt verfügbarer Lagerbestand zum Zeitpunkt der Inventur" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Datum der Inventur" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Mindestbestandswert" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Geschätzter Mindestwert des vorhandenen Bestands" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Maximaler Bestandswert" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Geschätzter Maximalwert des vorhandenen Bestands" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Ungültiger Vorlagenname - es muss mindestens ein alphanumerisches Zeichen enthalten sein" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "Testvorlage mit demselben Schlüssel existiert bereits für Teil" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "Testschlüssel" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "Vereinfachter Schlüssel zum Test" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "Ist dieser Test aktiviert?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Benötigt" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:3746 +#: part/models.py:3741 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:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:3753 +#: part/models.py:3748 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:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "Gültige Optionen für diesen Test (durch Komma getrennt)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Diese Stücklisten-Position ist ein Verbrauchsartikel (sie wird nicht in Bauaufträgen verfolgt)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "überprüft" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Diese Stücklistenposition wurde validiert" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Wird vererbt" -#: part/models.py:4072 +#: part/models.py:4067 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:4078 +#: part/models.py:4073 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:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Teil-Beziehung kann nicht zwischen einem Teil und sich selbst erstellt werden" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Übergeordnete Kategorie" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Übergeordnete Teilkategorie" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Unter-Kategorien" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Ergebnisse" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Anzahl der Ergebnisse, die in dieser Vorlage aufgezeichnet wurden" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Kaufwährung dieses Lagerartikels" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Originalteil" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Originalteil zum Duplizieren auswählen" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Bild kopieren" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Bild vom Originalteil kopieren" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Stückliste vom Originalteil kopieren" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Parameter kopieren" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Parameterdaten vom Originalteil kopieren" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Anmerkungen kopieren" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Notizen aus Originalteil kopieren" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Initiale Lagermenge für dieses Teil. Wenn die Menge null ist, wird kein Lagerbestand hinzugefügt." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategoriename" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Im Bau" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Lagerartikel" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Gesamtbestand" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Nicht zugewiesenes Lager" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Alternatives Lager" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kategorieparameter kopieren" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Vorhandenes Bild" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Dateiname eines vorhandenen Teilbildes" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Bilddatei existiert nicht" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Gesamte Stückliste validieren" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Herstellbar" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Berechneten Wert für Mindestpreis überschreiben" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Mindestpreis Währung" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Höchster Preis" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Berechneten Wert für maximalen Preis überschreiben" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Maximalpreis Währung" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Konnte nicht von den angegebenen Währungen in {default_currency} umrechnen" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Benachrichtigungen über geringen Bestand" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Der verfügbare Bestand für {part.name} ist unter das konfigurierte Mindestniveau gefallen" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "Unterstützt das Scannen von TME-Barcodes" msgid "The Supplier which acts as 'TME'" msgstr "Der Lieferant, der als 'TME' fungiert" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Nur Mitarbeiter können Plugins verwalten" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Plugin-Installation ist deaktiviert" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin wurde erfolgreich installiert" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plugin installiert in {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Plugin wurde nicht in der Registry gefunden" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Plugin ist kein gepacktes Plugin" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Plugin-Paketname nicht gefunden" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Nur Mitarbeiter können Plugins verwalten" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Plugin-Deinstallation ist deaktiviert" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Plugin kann nicht deinstalliert werden, da es momentan aktiv ist" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Plugin erfolgreich deinstallieren" @@ -7689,21 +7742,21 @@ msgstr "Paket-Plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Kein Autor gefunden" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Plugin '{p}' ist nicht kompatibel mit der aktuellen InvenTree Version {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Plugin benötigt mindestens Version {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Plugin benötigt maximal Version {v}" @@ -7884,51 +7937,51 @@ msgstr "Installation nicht bestätigt" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Komplett neu laden" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Führe ein vollständiges Nachladen der Plugin-Registrierung durch" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Neuladen erzwingen" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Erzwinge ein erneutes Laden der Plugin-Registrierung, auch wenn sie bereits geladen ist" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Plugins sammeln" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Plugins sammeln und zur Registrierung hinzufügen" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Plugin aktivieren" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Dieses Plugin aktivieren" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Konfiguration löschen" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Plugin-Konfiguration aus der Datenbank löschen" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "Summe" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Seriennummer" @@ -8215,7 +8268,7 @@ msgstr "Lagerartikel Test-Bericht" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Verbaute Objekte" @@ -8248,184 +8301,196 @@ msgstr "Kein Ergebnis (erforderlich)" msgid "No result" msgstr "Kein Ergebnis" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Die Bestandsdatei ist nicht vorhanden" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Bilddatei nicht gefunden" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "part_image tag benötigt eine Bauteilinstanz" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image tag erfordert eine Firmeninstanz" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filtern nach Standorttiefe" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Unterorte in gefilterte Ergebnisse einbeziehen" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Übergeordneter Ort" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtern nach übergeordnetem Ort" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Statuscode" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Externer Standort" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Teile-Baum" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Gültigkeitsdauer vor" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Gültigkeitsdauer nach" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "überfällig" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Menge ist erforderlich" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Gültiges Teil muss angegeben werden" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Der angegebene Lieferantenartikel existiert nicht" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Das Zulieferteil hat eine Packungsgröße definiert, aber das Kennzeichen use_pack_size ist nicht gesetzt" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Seriennummern können für nicht verfolgbare Teile nicht angegeben werden" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "Lagerstandorte Typen" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Standardsymbol für alle Orte, die kein Icon gesetzt haben (optional)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Bestand-Lagerort" @@ -8449,11 +8514,11 @@ msgstr "Bestand-Lagerort" msgid "Stock Locations" msgstr "Bestand-Lagerorte" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Besitzer" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Besitzer auswählen" @@ -8481,274 +8546,274 @@ msgstr "Standortart dieses Standortes" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Sie können diesen Lagerort nicht als strukturell markieren, da sich bereits Lagerartikel darin befinden!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagerartikel können nicht in strukturelle Lagerorte abgelegt werden!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Für virtuelle Teile können keine Lagerartikel erstellt werden" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Artikeltyp ('{self.supplier_part.part}') muss {self.part} sein" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" -#: stock/models.py:966 +#: stock/models.py:968 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:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Teil kann nicht zu sich selbst gehören" -#: stock/models.py:993 +#: stock/models.py:995 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:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Referenz verweist nicht auf das gleiche Teil" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Eltern-Lagerartikel" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Basis-Teil" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Verpackung, in der dieser Lagerartikel gelagert ist" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "verbaut in" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Bauauftrag für diesen Lagerartikel" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Verbraucht von" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Bauauftrag der diesen Lagerartikel verbrauchte" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Bestellung für diesen Lagerartikel" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:1167 +#: stock/models.py:1169 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:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Löschen wenn leer" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Diesen Lagerartikel löschen wenn der Bestand aufgebraucht ist" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Preis für eine Einheit bei Einkauf" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "In Teil umgewandelt" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Menge darf die verfügbare Lagermenge ({self.quantity}) nicht überschreiten" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Testvorlage existiert nicht" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Artikel wurde einem Kundenauftrag zugewiesen" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Lagerartikel ist in anderem Element verbaut" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Lagerartikel enthält andere Artikel" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Artikel wurde einem Kunden zugewiesen" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Lagerartikel wird aktuell produziert" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Artikel duplizeren" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Lagerartikel müssen auf dasselbe Teil verweisen" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Lagerartikel müssen auf dasselbe Lieferantenteil verweisen" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Status-Codes müssen zusammenpassen" -#: stock/models.py:2409 +#: stock/models.py:2411 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:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Test Notizen" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "Teststation" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Der Bezeichner der Teststation, in der der Test durchgeführt wurde" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "Gestartet" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Der Zeitstempel des Teststarts" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "Fertiggestellt" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Der Zeitstempel der Test-Beendigung" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "Testvorlage für dieses Ergebnis" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "Vorlagen-ID oder Testname muss angegeben werden" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "Die Test-Endzeit kann nicht früher als die Startzeit des Tests sein" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Elternposition" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Packungsgröße beim Hinzufügen verwenden: Die definierte Menge ist die Anzahl der Pakete" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Seriennummern für neue Teile eingeben" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "abgelaufen" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Untergeordnete Objekte" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Einkaufspreis dieses Lagerartikels, pro Einheit oder Verpackungseinheit" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Anzahl der zu serialisierenden Lagerartikel eingeben" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Anzahl darf nicht die verfügbare Menge überschreiten ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Ziel-Bestand" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Seriennummern können diesem Teil nicht zugewiesen werden" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Lagerartikel für Installation auswählen" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Zu installierende Menge" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Anzahl der zu verwendenden Artikel eingeben" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr " Transaktionsnotizen hinzufügen (optional)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "Die zu verwendende Menge muss mindestens 1 sein" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Lagerartikel ist nicht verfügbar" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "Ausgewähltes Teil ist nicht in der Stückliste" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "Die zu verwendende Menge darf die verfügbare Menge nicht überschreiten" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Ziel Lagerort für unverbautes Objekt" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Wählen Sie einen Teil aus, zu dem dieser Lagerartikel geändert werden soll" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "Das ausgewählte Teil ist keine gültige Option für die Umwandlung" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Lagerartikel konnte nicht mit Zulieferteil zugewiesen werden" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Lagerartikel Status-Code" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Lagerartikel auswählen, um den Status zu ändern" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Keine Lagerartikel ausgewählt" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Unter-Lagerorte" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "Übergeordneter Lagerort" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Teil muss verkaufbar sein" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "Artikel ist einem Kundenauftrag zugeordnet" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "Artikel ist einem Fertigungsauftrag zugeordnet" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Kunde zum Zuweisen von Lagerartikel" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "Ausgewählte Firma ist kein Kunde" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Notizen zur Lagerzuordnung" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Eine Liste der Lagerbestände muss angegeben werden" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Notizen zur Lagerartikelzusammenführung" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Unterschiedliche Lieferanten erlauben" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Lieferanten erlauben" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Unterschiedliche Status erlauben" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Status-Codes erlauben" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Mindestens zwei Lagerartikel müssen angegeben werden" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Keine Änderung" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "Nächste Seriennummer" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "Vorherige Seriennummer" @@ -9537,59 +9602,75 @@ msgstr "Nachname des Benutzers" msgid "Email address of the user" msgstr "E-Mailadresse des Benutzers" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Mitarbeiter" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Hat der Benutzer die Mitarbeiter Berechtigung" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Administrator" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Ist dieser Benutzer ein Administrator" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Ist dieses Benutzerkonto aktiv" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "Passwort" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Ihr Konto wurde erstellt." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Bitte benutzen Sie die Passwort-zurücksetzen-Funktion, um sich anzumelden" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Willkommen bei InvenTree" diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po index d830b45be2..38e187a3e1 100644 --- a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "Το API endpoint δε βρέθηκε" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Πρέπει να παρέχεται λίστα Προϊόντων ή φίλτρων για μαζική ενέργεια" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Τα Προϊόντα πρέπει να δοθούν ως λίστα" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Η λίστα Προϊόντων που δόθηκε δεν είναι έγκυρη" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Τα φίλτρα πρέπει να δοθούν ως λεξικό" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Τα φίλτρα που δόθηκαν δεν είναι έγκυρα" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Το φίλτρο all πρέπει να χρησιμοποιείται μόνο με τιμή true" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Κανένα Aντικείμενο δεν ταιριάζει στα κριτήρια που δόθηκαν" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Δεν δόθηκαν δεδομένα" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Αυτό το πεδίο πρέπει να είναι μοναδικό." -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Δεν έχετε δικαιώματα να το δείτε αυτό" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Δεν ήταν δυνατή η μετατροπή από {original} σε {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Μη έγκυρη ποσότητα" @@ -112,13 +104,13 @@ msgstr "Εισάγετε ημερομηνία" msgid "Invalid decimal value" msgstr "Μη έγκυρη δεκαδική τιμή" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Σημειώσεις" @@ -131,75 +123,91 @@ msgstr "Η τιμή '{name}' δεν εμφανίζεται σε μορφή μο msgid "Provided value does not match required pattern: " msgstr "Η παρεχόμενη τιμή δεν ταιριάζει με το απαιτούμενο απαραραίητη μοτίβο: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Δεν είναι δυνατή η σειριοποίηση περισσότερων από 1000 Προϊόντων ταυτόχρονα" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Κενό σειριακό αριθμό συμβολοσειράς" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Διπλότυπο ArialTTumblr" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Μη έγκυρη ομάδα: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Το εύρος της ομάδας {group} υπερβαίνει την επιτρεπόμενη ποσότητα ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Δεν βρέθηκαν σειριακοί αριθμοί" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Ο αριθμός μοναδικών σειριακών αριθμών ({n}) πρέπει να αντιστοιχεί στην ποσότητα ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Αφαιρέστε τα HTML tags από την τιμή που εισάγατε" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Τα δεδομένα περιέχουν απαγορευμένο περιεχόμενο markdown" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Σφάλμα σύνδεσης" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Ο διακομιστής απάντησε με μη έγκυρο κωδικό κατάστασης" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Προέκυψε σφάλμα" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Ο διακομιστής ανταποκρίθηκε με \"Invalid Content-Length value\"" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Η εικόνα είναι πολύ μεγάλη σε μέγεθος" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Η λήψη εικόνας ξεπέρασε το μέγιστο μέγεθος" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Ο διακομιστής επέστρεψε σφάλμα %1$d %2$s" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" @@ -207,11 +215,11 @@ msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" msgid "Log in to the app" msgstr "Σύνδεση στην εφαρμογή" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Πρέπει να ενεργοποιήσετε τον έλεγχο ταυτότητας δύο παραγόντων πριν κάνετε οτιδήποτε άλλο." @@ -259,18 +267,18 @@ msgstr "Ο αριθμός αναφοράς είναι πολύ μεγάλος" msgid "Invalid choice" msgstr "Μη έγκυρη επιλογή" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Όνομα" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Περιγραφή" msgid "Description (optional)" msgstr "Περιγραφή (προαιρετική)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Μονοπάτι" @@ -313,75 +321,66 @@ msgstr "Μοναδικό hash δεδομένων barcode" msgid "Existing barcode found" msgstr "Βρέθηκε υπάρχων barcode" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Αποτυχία εργασίας" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Η εργασία background worker '{f}' απέτυχε μετά από {n} προσπάθειες" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Σφάλμα διακομιστή" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Ένα σφάλμα έχει καταγραφεί από το διακομιστή." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Εικόνα" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Νόμισμα" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Επιλέξτε νόμισμα από τις διαθέσιμες επιλογές" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Μη έγκυρη τιμή" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Απομακρυσμένες Εικόνες" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "Διεύθυνση URL του αρχείου απομακρυσμένης εικόνας" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Αποτυχία λήψης εικόνας από απομακρυσμένο URL" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Κινέζικα (απλοποιημένα)" msgid "Chinese (Traditional)" msgstr "Κινέζικα (Παραδοσιακά)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Διαθέσιμη ενημέρωση" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "Μια ενημέρωση για το InvenTree είναι διαθέσιμη" @@ -553,30 +552,30 @@ msgstr "Μη έγκυρη φυσική μονάδα" msgid "Not a valid currency code" msgstr "Μη έγκυρος κωδικός συναλλάγματος" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Κατάσταση παραγγελίας" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Γονική Κατασκευή" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Συμπερίληψη παραλλαγών" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Συμπερίληψη παραλλαγών" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Συμπερίληψη παραλλαγών" msgid "Part" msgstr "Εξάρτημα" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Κατηγορία" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Πρόγονος κατασκευής" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Ανατεθειμένες σε εμένα" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Ανατεθεί σε" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Δημιουργήθηκε πριν από" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Δημιουργήθηκε μετά από" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Με ημερομηνία έναρξης" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Ημερομηνία έναρξης πριν από" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Ημερομηνία έναρξης μετά από" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Με ημερομηνία στόχο" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Ημερομηνία στόχος πριν από" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Ημερομηνία στόχος μετά από" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Ολοκληρώθηκε πριν από" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Ολοκληρώθηκε μετά από" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Ελάχιστη ημερομηνία" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Μέγιστη ημερομηνία" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Εξαίρεση δέντρου" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Αναλώσιμο" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Προαιρετικό" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Συναρμολόγηση" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Υπό παρακολούθηση" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Υπό δοκιμή" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Εκκρεμής παραγγελία" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Κατανεμημένο" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Καταναλωμένο" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Διαθέσιμο" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Σε παραγγελία" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Σειρά Κατασκευής" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Τοποθεσία" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Έξοδος" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Φιλτράρισμα με βάση το ID του αποθέματος εξόδου. Χρησιμοποιήστε 'null' για να βρείτε μη εγκατεστημένα στοιχεία κατασκευής" @@ -748,41 +751,41 @@ msgstr "Φιλτράρισμα με βάση το ID του αποθέματος msgid "Build Orders" msgstr "Δημιουργία Παραγγελιών" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Το BOM της συναρμολόγησης δεν έχει επικυρωθεί" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Δεν μπορεί να δημιουργηθεί εντολή κατασκευής για ανενεργό Aντικειμένου" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Δεν μπορεί να δημιουργηθεί εντολή κατασκευής για μη κλειδωμένο Aντικειμένου" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Οι εντολές κατασκευής μπορούν να εκτελεστούν εξωτερικά μόνο για Προϊόντα που μπορούν να αγοραστούν" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Πρέπει να οριστεί υπεύθυνος χρήστης ή ομάδα" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Εξάρτημα από εντολή κατασκευής δεν μπορεί να αλλάξει" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Η ημερομηνία στόχος πρέπει να είναι μετά την ημερομηνία έναρξης" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Αναφορά Παραγγελίας Κατασκευής" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Αναφορά Παραγγελίας Κατασκευής" msgid "Reference" msgstr "Αναφορά" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Σύντομη περιγραφή της κατασκευής (προαιρετικό)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Επιλέξτε τμήμα για κατασκευή" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Κωδικός Παραγγελίας Πωλήσεων" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Τοποθεσία Προέλευσης" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Επιλέξτε τοποθεσία από την οποία θα γίνει απόθεμα, για αυτή την κατασκευή (αφήστε κενό για να πάρετε από οποιαδήποτε θέση αποθήκευσης)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Εξωτερική κατασκευή" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Αυτή η εντολή κατασκευής εκτελείται εξωτερικά" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Τοποθεσία Προορισμού" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Επιλέξτε την τοποθεσία όπου θα αποθηκευτούν τα ολοκληρωμένα στοιχεία" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Ποσότητα Κατασκευής" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Αριθμός αντικειμένων για κατασκευή" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Ολοκληρωμένα αντικείμενα" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Αριθμός αντικειμένων αποθέματος που έχουν ολοκληρωθεί" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Κατάσταση Κατασκευής" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Ημερομηνία Δημιουργίας" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Ημερομηνία έναρξης κατασκευής" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την εντολή κατασκευής" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Ημερομηνία ολοκλήρωσης στόχου" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ημερομηνία ολοκλήρωσης της κατασκευής. Η κατασκευή θα καθυστερήσει μετά από αυτή την ημερομηνία." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Ημερομηνία ολοκλήρωσης" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "ολοκληρώθηκε από" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Εκδόθηκε από" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Χρήστης που εξέδωσε αυτήν την παραγγελία κατασκευής" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Υπεύθυνος" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την εντολή κατασκευής" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Εξωτερικοί σύνδεσμοι" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Προτεραιότητα Κατασκευής" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Προτεραιότητα αυτής της εντολής κατασκευής" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Κωδικός Έργου" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Κωδικός έργου για αυτήν την εντολή κατασκευής" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Δεν είναι δυνατή η ολοκλήρωση της εντολής κατασκευής με ανοιχτές θυγατρικές κατασκευές" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Δεν είναι δυνατή η ολοκλήρωση της εντολής κατασκευής με μη ολοκληρωμένα προϊόντα" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Αποτυχία εκχώρησης εργασίας για την ολοκλήρωση των κατανομών κατασκευής" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Η παραγγελία κατασκευής {build} έχει ολοκληρωθεί" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Πρέπει να δοθούν σειριακοί αριθμοί για τα ανιχνεύσιμα Προϊόντα" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Δεν καθορίστηκε έξοδος κατασκευής" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "Η έξοδος κατασκευής δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Δεν είναι δυνατή η μερική ολοκλήρωση προϊόντος κατασκευής με δεσμευμένα στοιχεία" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Γραμμή εντολής κατασκευής" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Αντικείμενο κατασκευής" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Αντικείμενο κατασκευής" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Ποσότητα" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Απαιτούμενη ποσότητα για την εντολή κατασκευής" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Ποσότητα καταναλωμένου αποθέματος" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Στοιχείο πηγαίου αποθέματος" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Εγκατάσταση σε" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Αποθήκη προορισμού" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Επίπεδο κατασκευής" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Όνομα Προϊόντος" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Κατασκευή Εξόδου" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Τοποθεσία αποθέματος για την έξοδο κατασκευής" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Θέση αποθέματος για απορριφθείσες παραγωγές" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Απόρριψη Κατανομών" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Απορρίψτε τυχόν κατανομές αποθέματος για παραγωγές που έχουν απορριφθεί" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Αιτία απόρριψης προϊόντων κατασκευής" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Τοποθεσία για ολοκληρωμένα προϊόντα κατασκευής" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Αποδοχή Ελλιπούς Δέσμευσης" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Ολοκλήρωσε τα προϊόντα εάν το απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Κατανάλωση δεσμευμένου αποθέματος" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Κατανάλωση οποιουδήποτε αποθέματος έχει ήδη δεσμευτεί για αυτή την κατασκευή" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Αφαίρεση Ατελείωτων Προϊόντων" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Διαγράψτε τυχόν προϊόντα κατασκευής που δεν έχουν ολοκληρωθεί" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Δεν επιτρέπεται" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Αποδοχή ως κατανάλωση για αυτή την παραγγελία κατασκευής" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Αποδέσμευση πριν από την ολοκλήρωση αυτής της παραγγελίας κατασκευής" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Υπερ-δεσμευμένο Απόθεμα" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Πώς θέλετε να χειριστείτε το επιπλέον απόθεμα που έχει δεσμευτεί στην παραγγελία κατασκευής" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Μερικά στοιχεία αποθέματος έχουν υπερ-δεσμευτεί" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Αποδοχή Μη Δεσμευμένων" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Αποδεχτείτε ότι αντικείμενα αποθέματος δεν έχουν δεσμευτεί πλήρως σε αυτή την παραγγελία κατασκευής" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Αποδοχή Μη Ολοκληρωμένων" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Αποδεχτείτε ότι ο απαιτούμενος αριθμός προϊόντων κατασκευής δεν έχει ολοκληρωθεί" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ολοκληρωθεί" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Η εντολή κατασκευής έχει ανοιχτές θυγατρικές εντολές κατασκευής" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Η εντολή κατασκευής πρέπει να βρίσκεται σε κατάσταση παραγωγής" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Η παραγγελία κατασκευής έχει ελλιπή προϊόντα" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Γραμμή Κατασκευής" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Προϊόν Κατασκευής" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Το προϊόν κατασκευής πρέπει να δείχνει στην ίδια κατασκευή" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Αντικείμενο Γραμμής Κατασκευής" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part πρέπει να δείχνει στο ίδιο εξάρτημα με τη εντολή κατασκευής" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Το στοιχείο πρέπει να υπάρχει στο απόθεμα" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Η διαθέσιμη ποσότητα ({q}) έχει ξεπεραστεί" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Πρέπει να καθοριστεί έξοδος κατασκευής για την κατανομή ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Δεν μπορεί να καθοριστεί έξοδος κατασκευής για την κατανομή μη ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Πρέπει να δοθούν στοιχεία κατανομής" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Τοποθεσία αποθέματος από την οποία θα ληφθούν τα Προϊόντα (αφήστε κενό για λήψη από οποιαδήποτε τοποθεσία)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Εξαίρεση τοποθεσίας" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Εξαιρέστε στοιχεία αποθέματος από αυτή την επιλεγμένη τοποθεσία" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Εναλλάξιμο απόθεμα" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Στοιχεία αποθέματος σε πολλές τοποθεσίες μπορούν να χρησιμοποιηθούν εναλλάξ" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Εναλλακτικό απόθεμα" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Να επιτρέπεται η κατανομή εναλλακτικών Προϊόντων" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Προαιρετικά στοιχεία" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Κατανομή προαιρετικών στοιχείων BOM στην εντολή κατασκευής" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Αποτυχία εκκίνησης εργασίας αυτόματης κατανομής" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Αναφορά BOM" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID Προϊόντος BOM" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Όνομα Προϊόντος BOM" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Κατασκευή" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Aντικειμένου προμηθευτή" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Δεσμευμένη ποσότητα" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Αναφορά κατασκευής" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Όνομα κατηγορίας Προϊόντος" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Ανιχνεύσιμο" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Κληρονομημένο" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Να επιτρέπονται παραλλαγές" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Στοιχείο BOM" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Σε παραγωγή" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Προγραμματισμένο για κατασκευή" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Εξωτερικό απόθεμα" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Διαθέσιμο απόθεμα" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Διαθέσιμο εναλλακτικό απόθεμα" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Διαθέσιμο απόθεμα παραλλαγών" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Η καταναλωμένη ποσότητα υπερβαίνει τη δεσμευμένη ποσότητα" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Προαιρετικές σημειώσεις για την κατανάλωση αποθέματος" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "Το στοιχείο κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Διπλή κατανομή στοιχείου κατασκευής" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "Η γραμμή κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Διπλή κατανομή γραμμής κατασκευής" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Πρέπει να δοθεί τουλάχιστον ένα στοιχείο ή μία γραμμή" @@ -1495,43 +1494,43 @@ msgstr "Σε αναμονή" msgid "Cancelled" msgstr "Ακυρώθηκε" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Ολοκληρώθηκε" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Απαιτείται απόθεμα για την εντολή κατασκευής" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Η εντολή κατασκευής {build} απαιτεί επιπλέον απόθεμα" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Εκπρόθεσμη εντολή κατασκευής" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Η εντολή κατασκευής {bo} είναι πλέον εκπρόθεσμη" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "Είναι σύνδεσμος" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "Είναι αρχείο" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτά τα συνημμένα" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτό το συνημμένο" @@ -1555,794 +1554,794 @@ msgstr "Χωρίς πρόσθετο" msgid "Project Code Label" msgstr "Ετικέτα κωδικού έργου" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Ενημερώθηκε" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Χρονική σήμανση τελευταίας ενημέρωσης" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "Ενημερώθηκε από" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "Χρήστης που ενημέρωσε τελευταίος αυτό το Aντικειμένου" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Μοναδικός κωδικός έργου" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Περιγραφή έργου" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτό το έργο" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Κλειδί ρυθμίσεων" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Τιμή ρυθμίσεων" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Η επιλεγμένη τιμή δεν είναι έγκυρη επιλογή" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Η τιμή πρέπει να είναι boolean" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Η τιμή πρέπει να είναι ακέραιος αριθμός" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Η τιμή πρέπει να είναι έγκυρος αριθμός" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "Η τιμή δεν περνά τους ελέγχους εγκυρότητας" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Η συμβολοσειρά κλειδιού πρέπει να είναι μοναδική" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Χρήστης" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Ποσότητα κλιμακωτής τιμής" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Τιμή" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Τιμή μονάδας στη συγκεκριμένη ποσότητα" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Το endpoint στο οποίο λαμβάνεται αυτό το webhook" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Όνομα για αυτό το webhook" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Ενεργό" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Είναι αυτό το webhook ενεργό" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token πρόσβασης" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Μυστικό" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Κοινόχρηστο μυστικό για HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "ID μηνύματος" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Μοναδικό αναγνωριστικό για αυτό το μήνυμα" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Host" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Host από τον οποίο παραλήφθηκε αυτό το μήνυμα" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Κεφαλίδα" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Κεφαλίδα αυτού του μηνύματος" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Κείμενο" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Κείμενο αυτού του μηνύματος" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Endpoint στο οποίο παραλήφθηκε αυτό το μήνυμα" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Επεξεργάστηκε" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Ολοκληρώθηκε η εργασία σε αυτό το μήνυμα;" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "ID" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Τίτλος" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Σύνδεσμος" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Δημοσιεύθηκε" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Συντάκτης" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Περίληψη" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Αναγνωσμένο" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Διαβάστηκε αυτό το νέο;" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Αρχείο εικόνας" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "Τύπος μοντέλου-στόχου για αυτή την εικόνα" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "ID μοντέλου-στόχου για αυτή την εικόνα" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Προσαρμοσμένη μονάδα" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Το σύμβολο μονάδας πρέπει να είναι μοναδικό" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Το όνομα μονάδας πρέπει να είναι έγκυρο αναγνωριστικό" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Όνομα μονάδας" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Σύμβολο" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Προαιρετικό σύμβολο μονάδας" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Ορισμός" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Ορισμός μονάδας" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Συνημμένο" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Το αρχείο λείπει" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Λείπει ο εξωτερικός σύνδεσμος" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Τύπος μοντέλου" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "Τύπος μοντέλου-στόχου για την εικόνα" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Επιλέξτε αρχείο για επισύναψη" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Σχόλιο" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Σχόλιο συνημμένου" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Ημερομηνία μεταφόρτωσης" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Ημερομηνία μεταφόρτωσης του αρχείου" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Μέγεθος αρχείου" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Μέγεθος αρχείου σε bytes" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Μη έγκυρος τύπος μοντέλου που ορίστηκε για το συνημμένο" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Προσαρμοσμένη κατάσταση" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Προσαρμοσμένες καταστάσεις" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Σετ κατάστασης αναφοράς" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Σετ καταστάσεων που επεκτείνεται με αυτή την προσαρμοσμένη κατάσταση" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Λογικό κλειδί" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "Λογικό κλειδί κατάστασης που είναι ισοδύναμο με αυτή την προσαρμοσμένη κατάσταση στη λογική της εφαρμογής" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Τιμή" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "Αριθμητική τιμή που θα αποθηκευτεί στη βάση δεδομένων των μοντέλων" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Όνομα της κατάστασης" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Ετικέτα" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Ετικέτα που θα εμφανίζεται στο frontend" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Χρώμα" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Χρώμα που θα εμφανίζεται στο frontend" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Μοντέλο" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "Μοντέλο με το οποίο συσχετίζεται αυτή η κατάσταση" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Πρέπει να επιλεγεί μοντέλο" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "Πρέπει να επιλεγεί κλειδί" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "Πρέπει να επιλεγεί λογικό κλειδί" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "Το κλειδί πρέπει να είναι διαφορετικό από το λογικό κλειδί" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Πρέπει να δοθεί έγκυρη κλάση κατάστασης αναφοράς" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "Το κλειδί πρέπει να είναι διαφορετικό από τα λογικά κλειδιά της κατάστασης αναφοράς" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "Το λογικό κλειδί πρέπει να ανήκει στα λογικά κλειδιά της κατάστασης αναφοράς" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "Το όνομα πρέπει να είναι διαφορετικό από τα ονόματα της κατάστασης αναφοράς" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Λίστα επιλογών" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Λίστες επιλογών" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Όνομα της λίστας επιλογών" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Περιγραφή της λίστας επιλογών" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Κλειδωμένο" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Είναι αυτή η λίστα επιλογών κλειδωμένη;" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Μπορεί να χρησιμοποιηθεί αυτή η λίστα επιλογών;" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Πρόσθετο πηγής" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Πρόσθετο που παρέχει τη λίστα επιλογών" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Συμβολοσειρά πηγής" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Προαιρετική συμβολοσειρά που ταυτοποιεί την πηγή που χρησιμοποιείται για αυτή τη λίστα" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Προεπιλεγμένη καταχώρηση" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Προεπιλεγμένη καταχώρηση για αυτή τη λίστα επιλογών" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Δημιουργήθηκε" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Ημερομηνία και ώρα δημιουργίας της λίστας επιλογών" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Τελευταία ενημέρωση" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης της λίστας επιλογών" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Καταχώρηση λίστας επιλογών" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Καταχωρήσεις λίστας επιλογών" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Λίστα επιλογών στην οποία ανήκει αυτή η καταχώρηση" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Τιμή της καταχώρησης λίστας επιλογών" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Ετικέτα για την καταχώρηση λίστας επιλογών" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Περιγραφή της καταχώρησης λίστας επιλογών" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "Είναι ενεργή αυτή η καταχώρηση λίστας επιλογών;" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Πρότυπο παραμέτρου" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν μονάδες" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν επιλογές" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Οι επιλογές πρέπει να είναι μοναδικές" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Το όνομα προτύπου παραμέτρου πρέπει να είναι μοναδικό" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Όνομα παραμέτρου" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Μονάδες" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Φυσικές μονάδες για αυτή την παράμετρο" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Περιγραφή παραμέτρου" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Checkbox" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Είναι αυτή η παράμετρος τύπου checkbox;" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Επιλογές" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Έγκυρες επιλογές για αυτή την παράμετρο (διαχωρισμένες με κόμμα)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "Λίστα επιλογών για αυτή την παράμετρο" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Ενεργό" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Μη έγκυρη επιλογή για την τιμή παραμέτρου" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Πρότυπο" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Δεδομένα" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Τιμή παραμέτρου" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Σημείωση" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Προαιρετικό πεδίο σημείωσης" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Σάρωση barcode" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Δεδομένα barcode" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Χρήστης που σάρωσε το barcode" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Χρονική σήμανση" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Ημερομηνία και ώρα της σάρωσης barcode" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "URL endpoint που επεξεργάστηκε το barcode" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Πλαίσιο" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Δεδομένα πλαισίου για τη σάρωση barcode" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Απόκριση" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Δεδομένα απόκρισης από τη σάρωση barcode" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Αποτέλεσμα" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "Ήταν επιτυχημένη η σάρωση barcode;" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "Παρουσιάστηκε σφάλμα" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Η διαγραφή του log email προστατεύεται. Ορίστε το INVENTREE_PROTECT_EMAIL_LOG σε False για να επιτραπεί η διαγραφή." -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "Μήνυμα email" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "Μηνύματα email" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "Ανακοινώθηκε" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "Εστάλη" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "Απέτυχε" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Παραδόθηκε" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Επιβεβαιώθηκε" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "Εισερχόμενο" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "Εξερχόμενο" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Χωρίς απάντηση" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "Παρακολούθηση παράδοσης" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "Παρακολούθηση ανάγνωσης" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "Παρακολούθηση κλικ" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "Αναγνωριστικό για αυτό το μήνυμα (ενδέχεται να παρέχεται από εξωτερικό σύστημα)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "ID νήματος" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Αναγνωριστικό για αυτό το νήμα μηνυμάτων (ενδέχεται να παρέχεται από εξωτερικό σύστημα)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "Νήμα" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "Συνδεδεμένο νήμα για αυτό το μήνυμα" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "Νήμα email" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "Νήματα email" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Κλειδί" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "Μοναδικό κλειδί για αυτό το νήμα (χρησιμοποιείται για την ταυτοποίησή του)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "Μοναδικό αναγνωριστικό για αυτό το νήμα" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "Ξεκίνησε εσωτερικά" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "Ξεκίνησε αυτό το νήμα εσωτερικά;" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "Ημερομηνία και ώρα δημιουργίας του νήματος" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης του νήματος" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} ακυρώθηκε" msgid "A order that is assigned to you was canceled" msgstr "Μια παραγγελία που σας είχε ανατεθεί ακυρώθηκε" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Είδη που παραλήφθηκαν" @@ -2392,1235 +2391,1243 @@ msgstr "Δείχνει αν η ρύθμιση παρακάμπτεται από msgid "Override" msgstr "Παράκαμψη" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Εκτελείται" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Εργασίες σε αναμονή" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Προγραμματισμένες εργασίες" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Αποτυχημένες εργασίες" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID εργασίας" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Μοναδικό ID εργασίας" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Κλείδωμα" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Χρόνος κλειδώματος" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Όνομα εργασίας" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Συνάρτηση" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Όνομα συνάρτησης" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Ορίσματα" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Ορίσματα εργασίας" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Ορίσματα λέξεων-κλειδιών" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Ορίσματα λέξεων-κλειδιών της εργασίας" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Όνομα αρχείου" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Τύπος μοντέλου" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Ο χρήστης δεν έχει δικαίωμα να δημιουργήσει ή να επεξεργαστεί συνημμένα για αυτό το μοντέλο" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Η λίστα επιλογών είναι κλειδωμένη" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Χωρίς ομάδα" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Το URL του site είναι κλειδωμένο από τη ρύθμιση" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Απαιτείται επανεκκίνηση" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Μια ρύθμιση έχει αλλάξει και απαιτείται επανεκκίνηση του διακομιστή" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Εκκρεμείς migrations" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Αριθμός εκκρεμών μεταναστεύσεων βάσης δεδομένων" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Ενεργοί κωδικοί προειδοποίησης" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Λεξικό με τους ενεργούς κωδικούς προειδοποίησης" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID instance" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Μοναδικό αναγνωριστικό για αυτό το instance του InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Δημοσίευση ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Δημοσίευση του instance ID του διακομιστή στις πληροφορίες κατάστασης διακομιστή (χωρίς έλεγχο ταυτότητας)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Όνομα instance διακομιστή" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Περιγραφή κειμένου για το instance του διακομιστή" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Χρήση ονόματος instance" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Χρήση του ονόματος instance στη γραμμή τίτλου" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Περιορισμός εμφάνισης `about`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Εμφάνιση της λειτουργίας `about` μόνο σε superusers" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Επωνυμία εταιρείας" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Εσωτερική επωνυμία εταιρείας" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Βασικό URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Βασικό URL για το instance του διακομιστή" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Προεπιλεγμένο νόμισμα" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Επιλέξτε βασικό νόμισμα για τους υπολογισμούς τιμών" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Υποστηριζόμενα νομίσματα" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Λίστα υποστηριζόμενων κωδικών νομισμάτων" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Διάστημα ενημέρωσης νομισμάτων" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Κάθε πότε θα ενημερώνονται οι συναλλαγματικές ισοτιμίες (0 για απενεργοποίηση)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "ημέρες" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Πρόσθετο ενημέρωσης νομισμάτων" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Πρόσθετο ενημέρωσης νομισμάτων που θα χρησιμοποιηθεί" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Λήψη από URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Να επιτρέπεται η λήψη απομακρυσμένων εικόνων και αρχείων από εξωτερικό URL" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Όριο μεγέθους λήψης" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Μέγιστο επιτρεπόμενο μέγεθος λήψης για απομακρυσμένη εικόνα" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "User-agent που χρησιμοποιείται για λήψη από URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Να επιτρέπεται η αντικατάσταση του user-agent που χρησιμοποιείται για λήψη εικόνων και αρχείων από εξωτερικό URL (αφήστε κενό για το προεπιλεγμένο)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Αυστηρή επικύρωση URL" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Να απαιτείται ορισμός σχήματος κατά την επικύρωση URL" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Διάστημα ελέγχου ενημερώσεων" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Κάθε πότε θα γίνεται έλεγχος για ενημερώσεις (0 για απενεργοποίηση)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Αυτόματο αντίγραφο ασφαλείας" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Ενεργοποίηση αυτόματου backup της βάσης δεδομένων και των media αρχείων" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Διάστημα αυτόματου backup" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Ορίστε τον αριθμό ημερών μεταξύ των αυτόματων backup" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Διάστημα διαγραφής εργασιών" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Τα αποτελέσματα εργασιών παρασκηνίου θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Διάστημα διαγραφής log σφαλμάτων" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Τα log σφαλμάτων θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Διάστημα διαγραφής ειδοποιήσεων" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Οι ειδοποιήσεις χρηστών θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "Διάστημα διαγραφής email" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "Τα μηνύματα email θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "Προστασία log email" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "Αποτροπή διαγραφής εγγραφών log email" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Υποστήριξη barcode" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Ενεργοποίηση υποστήριξης σαρωτή barcode στο web interface" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Αποθήκευση αποτελεσμάτων barcode" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Αποθήκευση των αποτελεσμάτων σάρωσης barcode στη βάση δεδομένων" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Μέγιστος αριθμός σαρώσεων barcode" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Μέγιστος αριθμός αποτελεσμάτων σάρωσης barcode που θα αποθηκεύονται" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Καθυστέρηση εισόδου barcode" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Χρόνος καθυστέρησης επεξεργασίας εισόδου barcode" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Υποστήριξη barcode μέσω webcam" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Να επιτρέπεται σάρωση barcode μέσω webcam στο πρόγραμμα περιήγησης" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Εμφάνιση δεδομένων barcode" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Εμφάνιση των δεδομένων barcode στο πρόγραμμα περιήγησης ως κείμενο" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Πρόσθετο δημιουργίας barcode" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Πρόσθετο που θα χρησιμοποιείται για εσωτερική δημιουργία δεδομένων barcode" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Εκδόσεις Προϊόντων" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Ενεργοποίηση πεδίου έκδοσης για Aντικειμένου" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "Μόνο εκδόσεις συναρμολογήσεων" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "Να επιτρέπονται εκδόσεις μόνο για Προϊόντα συναρμολόγησης" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Να επιτρέπεται διαγραφή από συναρμολόγηση" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Να επιτρέπεται η διαγραφή Προϊόντων που χρησιμοποιούνται σε συναρμολόγηση" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Πρότυπο regular expression για αντιστοίχιση IPN Προϊόντος" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Να επιτρέπονται διπλά IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Να επιτρέπεται σε πολλαπλά Προϊόντα να μοιράζονται το ίδιο IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Να επιτρέπεται η επεξεργασία IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Να επιτρέπεται η αλλαγή της τιμής IPN κατά την επεξεργασία ενός Προϊόντος" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Αντιγραφή δεδομένων BOM Προϊόντος" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων BOM από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Αντιγραφή δεδομένων παραμέτρων Προϊόντος" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων παραμέτρων από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Αντιγραφή δεδομένων δοκιμών Προϊόντος" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων δοκιμών από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Αντιγραφή προτύπων παραμέτρων κατηγορίας" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Αντιγραφή προτύπων παραμέτρων κατηγορίας κατά τη δημιουργία Προϊόντος" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Τα Προϊόντα είναι πρότυπα από προεπιλογή" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Τα Προϊόντα μπορούν να συναρμολογούνται από άλλα συστατικά από προεπιλογή" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Συστατικό" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Τα Προϊόντα μπορούν να χρησιμοποιούνται ως υποσυστατικά από προεπιλογή" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Αγοράσιμο" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Τα Προϊόντα είναι αγοράσιμα από προεπιλογή" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Πωλήσιμο" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Τα Προϊόντα είναι πωλήσιμα από προεπιλογή" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Τα Προϊόντα είναι ανιχνεύσιμα από προεπιλογή" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Εικονικό" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Τα Προϊόντα είναι εικονικά από προεπιλογή" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Εμφάνιση σχετικών Προϊόντων" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Εμφάνιση σχετικών Προϊόντων για ένα Aντικειμένου" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Αρχικά δεδομένα αποθέματος" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Να επιτρέπεται η δημιουργία αρχικού αποθέματος κατά την προσθήκη νέου Προϊόντος" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Αρχικά δεδομένα προμηθευτή" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Να επιτρέπεται η δημιουργία αρχικών δεδομένων προμηθευτή κατά την προσθήκη νέου Προϊόντος" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Μορφή εμφάνισης ονόματος Προϊόντος" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Μορφή με την οποία εμφανίζεται το όνομα του Προϊόντος" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Προεπιλεγμένο εικονίδιο κατηγορίας Προϊόντος" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Προεπιλεγμένο εικονίδιο κατηγορίας Προϊόντος (κενό σημαίνει χωρίς εικονίδιο)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Ελάχιστα δεκαδικά ψηφία τιμολόγησης" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Ελάχιστος αριθμός δεκαδικών ψηφίων που θα εμφανίζονται στα δεδομένα τιμολόγησης" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Μέγιστα δεκαδικά ψηφία τιμολόγησης" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Μέγιστος αριθμός δεκαδικών ψηφίων που θα εμφανίζονται στα δεδομένα τιμολόγησης" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Χρήση τιμών προμηθευτή" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Συμπερίληψη κλιμακωτών τιμών προμηθευτή στους συνολικούς υπολογισμούς τιμών" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Υπέρβαση μέσω ιστορικού αγορών" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Οι ιστορικές τιμές εντολών αγοράς υπερισχύουν των κλιμακωτών τιμών προμηθευτή" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Χρήση τιμολόγησης στοιχείου αποθέματος" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Χρήση τιμών από χειροκίνητα καταχωρημένα δεδομένα αποθέματος για τους υπολογισμούς τιμών" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Ηλικία τιμολόγησης στοιχείου αποθέματος" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Εξαίρεση στοιχείων αποθέματος παλαιότερων από αυτόν τον αριθμό ημερών από τους υπολογισμούς τιμών" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Χρήση τιμολόγησης παραλλαγών" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Συμπερίληψη τιμών παραλλαγών στους συνολικούς υπολογισμούς τιμών" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Μόνο ενεργές παραλλαγές" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Χρήση μόνο ενεργών Προϊόντων παραλλαγών για τον υπολογισμό τιμών παραλλαγών" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "Αυτόματη ενημέρωση τιμών" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "Αυτόματη ενημέρωση τιμών Προϊόντων όταν αλλάζουν τα εσωτερικά δεδομένα" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Διάστημα επαναυπολογισμού τιμών" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Αριθμός ημερών πριν ενημερωθούν αυτόματα οι τιμές των Προϊόντων" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Εσωτερικές τιμές" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Ενεργοποίηση εσωτερικών τιμών για Προϊόντα" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Υπέρβαση μέσω εσωτερικής τιμής" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Όταν υπάρχουν, οι εσωτερικές τιμές υπερισχύουν των υπολογισμών εύρους τιμών" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Ενεργοποίηση εκτύπωσης ετικετών" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Ενεργοποίηση εκτύπωσης ετικετών από το web interface" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "DPI εικόνας ετικέτας" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Ανάλυση DPI κατά τη δημιουργία αρχείων εικόνας για πρόσθετα εκτύπωσης ετικετών" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Ενεργοποίηση αναφορών" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Ενεργοποίηση δημιουργίας αναφορών" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Λειτουργία αποσφαλμάτωσης" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Δημιουργία αναφορών σε λειτουργία αποσφαλμάτωσης (έξοδος HTML)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Καταγραφή σφαλμάτων αναφορών" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Καταγραφή σφαλμάτων που προκύπτουν κατά τη δημιουργία αναφορών" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Μέγεθος σελίδας" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Προεπιλεγμένο μέγεθος σελίδας για PDF αναφορές" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Επιβολή μονάδων παραμέτρων" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Αν δοθούν μονάδες, οι τιμές των παραμέτρων πρέπει να αντιστοιχούν στις καθορισμένες μονάδες" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Καθολικά μοναδικοί σειριακοί αριθμοί" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Οι σειριακοί αριθμοί των στοιχείων αποθέματος πρέπει να είναι καθολικά μοναδικοί" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Διαγραφή εξαντλημένου αποθέματος" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Καθορίζει την προεπιλεγμένη συμπεριφορά όταν ένα στοιχείο αποθέματος εξαντλείται" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Πρότυπο κωδικού παρτίδας" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Πρότυπο για τη δημιουργία προεπιλεγμένων κωδικών παρτίδας για στοιχεία αποθέματος" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Λήξη αποθέματος" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Ενεργοποίηση λειτουργίας λήξης αποθέματος" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Πώληση ληγμένου αποθέματος" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Να επιτρέπεται η πώληση ληγμένου αποθέματος" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Χρόνος απαρχαίωσης αποθέματος" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Αριθμός ημερών που τα στοιχεία αποθέματος θεωρούνται παλαιωμένα πριν λήξουν" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Κατασκευή με ληγμένο απόθεμα" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Να επιτρέπεται η κατασκευή με ληγμένο απόθεμα" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Έλεγχος ιδιοκτησίας αποθέματος" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Ενεργοποίηση ελέγχου ιδιοκτησίας σε τοποθεσίες και στοιχεία αποθέματος" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Προεπιλεγμένο εικονίδιο τοποθεσίας αποθέματος" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Προεπιλεγμένο εικονίδιο τοποθεσίας αποθέματος (κενό σημαίνει χωρίς εικονίδιο)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Εμφάνιση εγκατεστημένων στοιχείων αποθέματος" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Εμφάνιση εγκατεστημένων στοιχείων αποθέματος στους πίνακες αποθέματος" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Έλεγχος BOM κατά την εγκατάσταση στοιχείων" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Τα εγκατεστημένα στοιχεία αποθέματος πρέπει να υπάρχουν στο BOM του γονικού Προϊόντος" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Να επιτρέπεται μεταφορά εκτός αποθέματος" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Να επιτρέπεται η μεταφορά στοιχείων αποθέματος που δεν είναι διαθέσιμα μεταξύ τοποθεσιών αποθέματος" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Πρότυπο αναφοράς εντολής κατασκευής" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Απαιτούμενο πρότυπο για τη δημιουργία του πεδίου αναφοράς εντολής κατασκευής" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Απαίτηση υπεύθυνου κατόχου" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Πρέπει να οριστεί υπεύθυνος ιδιοκτήτης για κάθε παραγγελία" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Απαίτηση ενεργού προϊόντος" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής για ανενεργά προϊόντα" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Απαίτηση κλειδωμένου προϊόντος" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής για ξεκλείδωτα προϊόντα" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "Απαίτηση έγκυρης BOM" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής αν δεν έχει επικυρωθεί η BOM" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "Απαίτηση κλειστών θυγατρικών εντολών" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Αποτροπή ολοκλήρωσης εντολής παραγωγής μέχρι να κλείσουν όλες οι θυγατρικές εντολές" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "Εξωτερικές εντολές παραγωγής" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "Ενεργοποίηση λειτουργίας εξωτερικών εντολών παραγωγής" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Φραγή έως ότου περάσουν τα τεστ" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Αποτροπή ολοκλήρωσης εξόδων παραγωγής μέχρι να περάσουν όλα τα απαιτούμενα τεστ" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Ενεργοποίηση εντολών επιστροφής" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Ενεργοποίηση λειτουργίας εντολών επιστροφής στη διεπαφή χρήστη" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Μοτίβο αναφοράς εντολής επιστροφής" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής επιστροφής" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Επεξεργασία ολοκληρωμένων εντολών επιστροφής" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Επιτρέπει την επεξεργασία εντολών επιστροφής μετά την ολοκλήρωσή τους" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Μοτίβο αναφοράς εντολής πώλησης" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής πώλησης" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Προεπιλεγμένη αποστολή εντολής πώλησης" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Ενεργοποίηση δημιουργίας προεπιλεγμένης αποστολής με τις εντολές πώλησης" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Επεξεργασία ολοκληρωμένων εντολών πώλησης" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Επιτρέπει την επεξεργασία εντολών πώλησης μετά την αποστολή ή ολοκλήρωσή τους" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "Η αποστολή απαιτεί έλεγχο" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "Αποτροπή ολοκλήρωσης αποστολών μέχρι να ελεγχθούν τα είδη" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Σήμανση αποσταλμένων εντολών ως ολοκληρωμένων" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Οι εντολές πώλησης που επισημαίνονται ως αποσταλμένες ολοκληρώνονται αυτόματα, παρακάμπτοντας την κατάσταση «απεσταλμένο»" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Μοτίβο αναφοράς εντολής αγοράς" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής αγοράς" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Επεξεργασία ολοκληρωμένων εντολών αγοράς" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Επιτρέπει την επεξεργασία εντολών αγοράς μετά την αποστολή ή ολοκλήρωσή τους" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Μετατροπή νομίσματος" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "Μετατροπή της αξίας είδους στο βασικό νόμισμα κατά την παραλαβή αποθέματος" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Αυτόματη ολοκλήρωση εντολών αγοράς" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Αυτόματη σήμανση εντολών αγοράς ως ολοκληρωμένων όταν έχουν παραληφθεί όλα τα είδη" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Ενεργοποίηση υπενθύμισης κωδικού" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Ενεργοποίηση λειτουργίας υπενθύμισης κωδικού στις σελίδες σύνδεσης" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Ενεργοποίηση εγγραφής" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Ενεργοποίηση αυτοεγγραφής χρηστών στις σελίδες σύνδεσης" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Ενεργοποίηση SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Ενεργοποίηση SSO στις σελίδες σύνδεσης" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Ενεργοποίηση εγγραφής μέσω SSO" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Ενεργοποίηση αυτοεγγραφής μέσω SSO στις σελίδες σύνδεσης" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "Ενεργοποίηση συγχρονισμού ομάδων SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Ενεργοποίηση συγχρονισμού ομάδων InvenTree με ομάδες από τον IdP" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "Κλειδί ομάδας SSO" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Το όνομα του πεδίου ομάδων που παρέχεται από τον IdP" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "Χάρτης ομάδων SSO" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Χαρτογράφηση ομάδων SSO σε τοπικές ομάδες InvenTree. Αν η ομάδα δεν υπάρχει, θα δημιουργηθεί." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Αφαίρεση ομάδων εκτός SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Αν πρέπει να αφαιρούνται ομάδες από τον χρήστη όταν δεν παρέχονται από τον IdP. Η απενεργοποίηση μπορεί να προκαλέσει προβλήματα ασφαλείας" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Απαίτηση email" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Απαίτηση συμπλήρωσης email κατά την εγγραφή" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Αυτόματη συμπλήρωση χρηστών SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Αυτόματη συμπλήρωση στοιχείων χρήστη από τα δεδομένα SSO" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Email δύο φορές" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Κατά την εγγραφή ζητείται το email δύο φορές" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Κωδικός δύο φορές" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Κατά την εγγραφή ζητείται ο κωδικός δύο φορές" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Επιτρεπόμενοι τομείς" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Περιορισμός εγγραφής σε συγκεκριμένους τομείς (χωρισμένοι με κόμμα, ξεκινούν με @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Ομάδα κατά την εγγραφή" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Ομάδα στην οποία εκχωρούνται οι νέοι χρήστες κατά την εγγραφή. Με ενεργό SSO sync, χρησιμοποιείται μόνο όταν δεν μπορεί να δοθεί ομάδα από τον IdP." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Επιβολή MFA" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Οι χρήστες πρέπει να χρησιμοποιούν πολυπαραγοντική ασφάλεια" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Έλεγχος plugins κατά την εκκίνηση" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Έλεγχος ότι όλα τα plugins είναι εγκατεστημένα κατά την εκκίνηση – χρήσιμο σε container περιβάλλοντα" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Έλεγχος για ενημερώσεις plugin" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Ενεργοποίηση περιοδικών ελέγχων για ενημερώσεις εγκατεστημένων plugins" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Ενεργοποίηση URL integration" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Ενεργοποίηση προσθήκης URL routes από plugins" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Ενεργοποίηση ενσωμάτωσης στην πλοήγηση" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Ενεργοποίηση ενσωμάτωσης των plugins στην πλοήγηση" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Ενεργοποίηση ενσωμάτωσης εφαρμογών" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Ενεργοποίηση προσθήκης εφαρμογών από plugins" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Ενεργοποίηση ενσωμάτωσης χρονοπρογραμματισμού" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Ενεργοποίηση εκτέλεσης χρονοπρογραμματισμένων εργασιών από plugins" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Ενεργοποίηση ενσωμάτωσης γεγονότων" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Ενεργοποίηση απόκρισης plugins σε εσωτερικά γεγονότα" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Ενεργοποίηση ενσωμάτωσης διεπαφής" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Ενεργοποίηση ενσωμάτωσης plugins στη διεπαφή χρήστη" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "Ενεργοποίηση ενσωμάτωσης email" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Ενεργοποίηση επεξεργασίας εισερχόμενων/εξερχόμενων emails από plugins" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "Ενεργοποίηση κωδικών έργου" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Ενεργοποίηση κωδικών έργου για την παρακολούθηση projects" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "Ενεργοποίηση καταγραφής ιστορικών επιπέδων και αξιών αποθέματος" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Εξαίρεση εξωτερικών τοποθεσιών" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Περίοδος αυτόματης απογραφής" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Εμφάνιση πλήρους ονόματος χρηστών" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Εμφάνιση του πλήρους ονόματος των χρηστών αντί για το όνομα χρήστη" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "Εμφάνιση προφίλ χρηστών" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "Εμφάνιση προφίλ χρηστών στη σελίδα προφίλ τους" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Ενεργοποίηση δεδομένων σταθμού δοκιμών" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Ενεργοποίηση συλλογής δεδομένων σταθμού δοκιμών για τα αποτελέσματα δοκιμών" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "Ενεργοποίηση ping μηχανημάτων" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Ενεργοποίηση περιοδικού ping των καταχωρημένων μηχανημάτων για έλεγχο της κατάστασής τους" @@ -3965,346 +3972,346 @@ msgstr "Το προϊόν είναι ενεργό" msgid "Manufacturer is Active" msgstr "Ο κατασκευαστής είναι ενεργός" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "Το προϊόν προμηθευτή είναι ενεργό" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "Το εσωτερικό προϊόν είναι ενεργό" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "Ο προμηθευτής είναι ενεργός" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Κατασκευαστής" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Εταιρεία" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Διαθέτει απόθεμα" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Εταιρείες" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Περιγραφή εταιρείας" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Περιγραφή της εταιρείας" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Ιστότοπος" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "URL ιστοτόπου εταιρείας" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Τηλέφωνο" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Τηλέφωνο επικοινωνίας" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Email επικοινωνίας" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Επαφή" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Σημείο επαφής" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Σύνδεσμος σε εξωτερικές πληροφορίες εταιρείας" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Είναι αυτή η εταιρεία ενεργή;" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Είναι πελάτης" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Πουλάτε είδη σε αυτή την εταιρεία;" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Είναι προμηθευτής" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Αγοράζετε είδη από αυτή την εταιρεία;" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Είναι κατασκευαστής" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Κατασκευάζει αυτή η εταιρεία προϊόντα;" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Προεπιλεγμένο νόμισμα που χρησιμοποιείται για αυτή την εταιρεία" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "ΑΦΜ" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "ΑΦΜ εταιρείας" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Διεύθυνση" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Διευθύνσεις" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Επιλογή εταιρείας" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Τίτλος διεύθυνσης" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Τίτλος που περιγράφει την εγγραφή διεύθυνσης" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Κύρια διεύθυνση" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Ορισμός ως κύριας διεύθυνσης" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Γραμμή 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Γραμμή διεύθυνσης 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Γραμμή 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Γραμμή διεύθυνσης 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Ταχυδρομικός κώδικας" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Πόλη/Περιοχή" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Πόλη/περιοχή ταχυδρομικού κώδικα" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Πολιτεία/Επαρχία" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Πολιτεία ή επαρχία" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Χώρα" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Χώρα διεύθυνσης" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Σημειώσεις αποστολής για courier" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Σημειώσεις για την αποστολή με courier" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Εσωτερικές σημειώσεις αποστολής" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Σημειώσεις αποστολής για εσωτερική χρήση" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Σύνδεσμος σε πληροφορίες διεύθυνσης (εξωτερικό)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Προϊόν κατασκευαστή" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Βασικό προϊόν" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Επιλογή προϊόντος" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Επιλογή κατασκευαστή" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Κωδικός προϊόντος κατασκευαστή" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL εξωτερικού συνδέσμου προϊόντος κατασκευαστή" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Περιγραφή προϊόντος κατασκευαστή" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Οι μονάδες συσκευασίας πρέπει να είναι συμβατές με τις μονάδες του βασικού προϊόντος" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Οι μονάδες συσκευασίας πρέπει να είναι μεγαλύτερες από το μηδέν" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Το συνδεδεμένο προϊόν κατασκευαστή πρέπει να αναφέρεται στο ίδιο βασικό προϊόν" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Προμηθευτής" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Επιλογή προμηθευτή" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Κωδικός αποθέματος προμηθευτή" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Είναι αυτό το προϊόν προμηθευτή ενεργό;" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Επιλογή προϊόντος κατασκευαστή" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL εξωτερικού συνδέσμου προϊόντος προμηθευτή" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Περιγραφή προϊόντος προμηθευτή" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "βασικό κόστος" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Ελάχιστη χρέωση (π.χ. χρέωση αποθήκευσης)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Συσκευασία" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Συσκευασία προϊόντος" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Ποσότητα ανά συσκευασία" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Συνολική ποσότητα που παρέχεται σε μία συσκευασία. Αφήστε κενό για μεμονωμένα είδη." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "πολλαπλάσιο" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Πολλαπλάσιο παραγγελίας" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Ποσότητα διαθέσιμη από τον προμηθευτή" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Η διαθεσιμότητα ενημερώθηκε" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Ημερομηνία τελευταίας ενημέρωσης δεδομένων διαθεσιμότητας" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Κλιμακωτή τιμή προμηθευτή" @@ -4316,7 +4323,7 @@ msgstr "Προεπιλεγμένο νόμισμα που χρησιμοποιε msgid "Company Name" msgstr "Όνομα εταιρείας" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Σε απόθεμα" @@ -4452,7 +4459,7 @@ msgstr "Το πεδίο δεν υπάρχει στο μοντέλο προορι msgid "Selected field is read-only" msgstr "Το επιλεγμένο πεδίο είναι μόνο για ανάγνωση" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Συνεδρία εισαγωγής" @@ -4464,31 +4471,31 @@ msgstr "Πεδίο" msgid "Column" msgstr "Στήλη" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Δείκτης γραμμής" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Αρχικά δεδομένα γραμμής" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Σφάλματα" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Έγκυρο" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "Απαιτείται ID για την ενημέρωση υπαρχόντων εγγραφών." -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Δεν βρέθηκε εγγραφή με το παρεχόμενο ID" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Δόθηκε μη έγκυρη μορφή ID" @@ -4588,7 +4595,7 @@ msgstr "Αριθμός αντιτύπων προς εκτύπωση για κά msgid "Connected" msgstr "Συνδεδεμένος" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Άγνωστο" @@ -4716,105 +4723,117 @@ msgstr "Μέγιστη πρόοδος" msgid "Maximum value for progress type, required if type=progress" msgstr "Μέγιστη τιμή για τύπο προόδου, απαιτείται αν type=progress" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Αναφορά παραγγελίας" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Σε εκκρεμότητα" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Έχει κωδικό έργου" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Δημιουργήθηκε από" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Δημιουργήθηκε πριν" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Δημιουργήθηκε μετά" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "Έχει ημερομηνία έναρξης" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "Ημερομηνία έναρξης πριν" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "Ημερομηνία έναρξης μετά" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "Έχει ημερομηνία στόχο" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Ημερομηνία στόχος πριν" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Ημερομηνία στόχος μετά" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Έχει τιμολόγηση" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Ολοκληρώθηκε πριν" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Ολοκληρώθηκε μετά" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "Εξωτερική εντολή παραγωγής" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Παραγγελία" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Η παραγγελία ολοκληρώθηκε" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Εσωτερικό προϊόν" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Η παραγγελία είναι σε εκκρεμότητα" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Ολοκληρώθηκε" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Έχει αποστολή" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Εντολή αγοράς" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Εντολή αγοράς" msgid "Sales Order" msgstr "Εντολές Πώλησης" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Συνολική τιμή" msgid "Total price for this order" msgstr "Συνολική τιμή για αυτή την παραγγελία" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Νόμισμα παραγγελίας" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Νόμισμα για αυτή την παραγγελία (αφήστε κενό για χρήση της προεπιλογής εταιρείας)" @@ -4851,718 +4870,742 @@ msgstr "Νόμισμα για αυτή την παραγγελία (αφήστε msgid "This order is locked and cannot be modified" msgstr "Αυτή η παραγγελία είναι κλειδωμένη και δεν μπορεί να τροποποιηθεί" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Η επαφή δεν αντιστοιχεί στην επιλεγμένη εταιρεία" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Η ημερομηνία έναρξης πρέπει να είναι πριν από την ημερομηνία στόχο" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "Η διεύθυνση δεν αντιστοιχεί στην επιλεγμένη εταιρεία" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Περιγραφή παραγγελίας (προαιρετικά)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Επιλογή κωδικού έργου για αυτή την παραγγελία" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Σύνδεσμος σε εξωτερική σελίδα" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Ημερομηνία έναρξης" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την παραγγελία" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Επιθυμητή Προθεσμία" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Αναμενόμενη ημερομηνία παράδοσης παραγγελίας. Η παραγγελία θα θεωρείται εκπρόθεσμη μετά από αυτή την ημερομηνία." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Ημερομηνία έκδοσης" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Ημερομηνία έκδοσης της παραγγελίας" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την παραγγελία" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Σημείο επαφής για αυτή την παραγγελία" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Διεύθυνση εταιρείας για αυτή την παραγγελία" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Αναφορά παραγγελίας" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Κατάσταση" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Κατάσταση εντολής αγοράς" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Εταιρεία από την οποία παραγγέλνονται τα είδη" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Αναφορά προμηθευτή" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Κωδικός αναφοράς παραγγελίας προμηθευτή" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "παραλήφθηκε από" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Ημερομηνία ολοκλήρωσης της παραγγελίας" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Προορισμός" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Προορισμός για τα παραληφθέντα είδη" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Ο προμηθευτής προϊόντος πρέπει να ταιριάζει με τον προμηθευτή της εντολής αγοράς" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή αγοράς" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Στη γραμμή λείπει συνδεδεμένο προϊόν" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Η ποσότητα πρέπει να είναι θετικός αριθμός" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Πελάτης" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Εταιρεία στην οποία πωλούνται τα είδη" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Κατάσταση εντολής πώλησης" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Αναφορά πελάτη " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Κωδικός αναφοράς παραγγελίας πελάτη" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Ημερομηνία αποστολής" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "απεστάλη από" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "Η παραγγελία είναι ήδη ολοκληρωμένη" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "Η παραγγελία είναι ήδη ακυρωμένη" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Μόνο μια ανοικτή παραγγελία μπορεί να σημειωθεί ως ολοκληρωμένη" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες αποστολές" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες δεσμεύσεις αποθέματος" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες γραμμές" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "Η παραγγελία είναι κλειδωμένη και δεν μπορεί να τροποποιηθεί" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Ποσότητα είδους" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Αναφορά γραμμής" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Σημειώσεις γραμμής" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Ημερομηνία στόχος για αυτή τη γραμμή (αφήστε κενό για χρήση της ημερομηνίας στόχου από την παραγγελία)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Περιγραφή γραμμής (προαιρετικά)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Πρόσθετο πλαίσιο για αυτή τη γραμμή" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Τιμή μονάδας" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "Γραμμή εντολής αγοράς" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "Το προϊόν προμηθευτή πρέπει να ταιριάζει με τον προμηθευτή" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "Η εντολή παραγωγής πρέπει να έχει σημειωθεί ως εξωτερική" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "Οι εντολές παραγωγής μπορούν να συνδεθούν μόνο με προϊόντα συναρμολόγησης" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "Το προϊόν της εντολής παραγωγής πρέπει να ταιριάζει με το προϊόν της γραμμής" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Προϊόν προμηθευτή" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Παραλήφθηκε" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Αριθμός ειδών που παραλήφθηκαν" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Τιμή αγοράς" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Τιμή μονάδας αγοράς" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "Εξωτερική εντολή παραγωγής που θα καλυφθεί από αυτή τη γραμμή" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "Επιπλέον γραμμή εντολής αγοράς" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "Γραμμή εντολής πώλησης" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Μόνο πωλήσιμα προϊόντα μπορούν να αντιστοιχιστούν σε εντολή πώλησης" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Τιμή πώλησης" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Τιμή μονάδας πώλησης" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Αποστάλθηκε" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Ποσότητα που αποστάλθηκε" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "Αποστολή εντολής πώλησης" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "Η διεύθυνση αποστολής πρέπει να αντιστοιχεί στον πελάτη" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "Διεύθυνση αποστολής για αυτή την αποστολή" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Ημερομηνία αποστολής" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Ημερομηνία παράδοσης" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Ημερομηνία παράδοσης της αποστολής" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Έλεγχος από" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Χρήστης που έλεγξε αυτή την αποστολή" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Αποστολή" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Αριθμός αποστολής" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Αριθμός παρακολούθησης" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Πληροφορίες παρακολούθησης αποστολής" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Αριθμός τιμολογίου" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Αριθμός αναφοράς του σχετικού τιμολογίου" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Η αποστολή έχει ήδη σταλεί" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Η αποστολή δεν έχει δεσμευμένα είδη αποθέματος" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "Η αποστολή πρέπει να ελεγχθεί πριν μπορέσει να ολοκληρωθεί" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "Επιπλέον γραμμή εντολής πώλησης" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "Δέσμευση αποθέματος εντολής πώλησης" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "Δεν έχει αντιστοιχιστεί είδος αποθέματος" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Δεν είναι δυνατή η δέσμευση είδους αποθέματος σε γραμμή με διαφορετικό προϊόν" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Δεν είναι δυνατή η δέσμευση αποθέματος σε γραμμή χωρίς προϊόν" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Η ποσότητα δέσμευσης δεν μπορεί να υπερβαίνει την ποσότητα αποθέματος" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριοποιημένο είδος αποθέματος" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Η εντολή πώλησης δεν αντιστοιχεί στην αποστολή" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Η αποστολή δεν αντιστοιχεί στην εντολή πώλησης" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Γραμμή" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Αναφορά αποστολής εντολής πώλησης" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Είδος" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Επιλογή είδους αποθέματος προς δέσμευση" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Εισαγωγή ποσότητας δέσμευσης αποθέματος" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Αναφορά εντολής επιστροφής" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Εταιρεία από την οποία επιστρέφονται τα είδη" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Κατάσταση εντολής επιστροφής" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "Γραμμή εντολής επιστροφής" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "Πρέπει να καθοριστεί είδος αποθέματος" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "Η ποσότητα επιστροφής υπερβαίνει την ποσότητα αποθέματος" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "Η ποσότητα επιστροφής πρέπει να είναι μεγαλύτερη από το μηδέν" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "Μη έγκυρη ποσότητα για σειριοποιημένο είδος αποθέματος" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Επιλογή είδους προς επιστροφή από τον πελάτη" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Ημερομηνία παραλαβής" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Έκβαση" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Έκβαση για αυτή τη γραμμή" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Κόστος που σχετίζεται με την επιστροφή ή επισκευή για αυτή τη γραμμή" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "Επιπλέον γραμμή εντολής επιστροφής" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID παραγγελίας" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID της παραγγελίας προς αντιγραφή" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Αντιγραφή γραμμών" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Αντιγραφή γραμμών από την αρχική παραγγελία" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Αντιγραφή επιπλέον γραμμών" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Αντιγραφή επιπλέον γραμμών από την αρχική παραγγελία" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Αντιγραφή παραμέτρων" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Γραμμές" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Ολοκληρωμένες γραμμές" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Αντιγραφή παραγγελίας" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Καθορίστε επιλογές για την αντιγραφή αυτής της παραγγελίας" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Μη έγκυρο ID παραγγελίας" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Όνομα προμηθευτή" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Η παραγγελία δεν μπορεί να ακυρωθεί" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Να επιτρέπεται το κλείσιμο της παραγγελίας με μη ολοκληρωμένες γραμμές" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "Η παραγγελία έχει μη ολοκληρωμένες γραμμές" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "Η παραγγελία δεν είναι ανοικτή" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Αυτόματη τιμολόγηση" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Αυτόματος υπολογισμός τιμής αγοράς βάσει των δεδομένων προϊόντος προμηθευτή" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Νόμισμα τιμής αγοράς" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Συγχώνευση ειδών" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Συγχώνευση ειδών με το ίδιο προϊόν, προορισμό και ημερομηνία στόχο σε μία γραμμή" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Εσωτερικός κωδικός προϊόντος" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Εσωτερική ονομασία προϊόντος" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Πρέπει να καθοριστεί προϊόν προμηθευτή" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Πρέπει να καθοριστεί εντολή αγοράς" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Ο προμηθευτής πρέπει να ταιριάζει με την εντολή αγοράς" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Η εντολή αγοράς πρέπει να ταιριάζει με τον προμηθευτή" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Γραμμή" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Επιλογή τοποθεσίας προορισμού για τα παραληφθέντα είδη" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Εισαγάγετε κωδικό παρτίδας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ημερομηνία λήξης" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "Εισαγάγετε ημερομηνία λήξης για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Εισαγάγετε σειριακούς αριθμούς για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "Παράκαμψη πληροφοριών συσκευασίας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "Πρόσθετη σημείωση για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Σαρωμένο barcode" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Το barcode χρησιμοποιείται ήδη" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Πρέπει να δοθούν γραμμές" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Πρέπει να καθοριστεί τοποθεσία προορισμού" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Οι δοθείσες τιμές barcode πρέπει να είναι μοναδικές" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Αποστολές" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Ολοκληρωμένες αποστολές" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Νόμισμα τιμής πώλησης" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Δεσμευμένα είδη" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Δεν δόθηκαν λεπτομέρειες αποστολής" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Η γραμμή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Η ποσότητα πρέπει να είναι θετική" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Εισαγάγετε σειριακούς αριθμούς προς δέσμευση" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "Η αποστολή έχει ήδη σταλεί" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "Η αποστολή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Δεν βρέθηκε αντιστοίχιση για τους παρακάτω σειριακούς αριθμούς" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Οι παρακάτω σειριακοί αριθμοί δεν είναι διαθέσιμοι" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Γραμμή εντολής επιστροφής" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή επιστροφής" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Η γραμμή έχει ήδη παραληφθεί" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Είδη μπορούν να παραληφθούν μόνο για παραγγελίες που είναι σε εξέλιξη" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "Ποσότητα προς επιστροφή" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Νόμισμα τιμής γραμμής" @@ -5598,146 +5641,146 @@ msgstr "Επιστροφή χρημάτων" msgid "Reject" msgstr "Απόρριψη" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Εκπρόθεσμη εντολή αγοράς" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Η εντολή αγοράς {po} είναι πλέον εκπρόθεσμη" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Εκπρόθεσμη εντολή πώλησης" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Η εντολή πώλησης {so} είναι πλέον εκπρόθεσμη" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Εκπρόθεσμη εντολή επιστροφής" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "Η εντολή επιστροφής {ro} είναι πλέον εκπρόθεσμη" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Με αστέρι" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Φιλτράρισμα κατά κατηγορίες με αστέρι" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Βάθος" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Φιλτράρισμα κατά βάθος κατηγορίας" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Ανώτατο επίπεδο" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Φιλτράρισμα κατά κατηγορίες ανώτατου επιπέδου" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Κατά κληρονομικότητα" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Συμπερίληψη υποκατηγοριών στα φιλτραρισμένα αποτελέσματα" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Γονική" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Φιλτράρισμα κατά γονική κατηγορία" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Εξαίρεση υποκατηγοριών κάτω από την καθορισμένη κατηγορία" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Έχει αποτελέσματα" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Είναι παραλλαγή" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Είναι αναθεώρηση" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Έχει αναθεωρήσεις" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Έγκυρο BOM" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Κατηγορίες κατά κληρονομικότητα" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Αν είναι αληθές, συμπεριλαμβάνονται είδη σε θυγατρικές κατηγορίες της δοσμένης κατηγορίας" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Φιλτράρισμα κατά αριθμητικό ID κατηγορίας ή τη λέξη 'null'" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Το προϊόν συναρμολόγησης είναι υπό δοκιμή" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "Το προϊόν Προϊόντος είναι υπό δοκιμή" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Χρήσεις" @@ -5750,7 +5793,7 @@ msgstr "Κατηγορία προϊόντος" msgid "Part Categories" msgstr "Κατηγορίες προϊόντων" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Προεπιλεγμένη τοποθεσία" @@ -5778,7 +5821,7 @@ msgstr "Προεπιλεγμένες λέξεις-κλειδιά για προϊ msgid "Icon" msgstr "Εικονίδιο" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Εικονίδιο (προαιρετικό)" @@ -5799,7 +5842,7 @@ msgstr "Προεπιλεγμένη τιμή" msgid "Default Parameter Value" msgstr "Προεπιλεγμένη τιμή παραμέτρου" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Προϊόντα" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "Το προϊόν δεν μπορεί να είναι αναθεώρηση του εαυτού του" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "Δεν μπορεί να γίνει αναθεώρηση προϊόντος που είναι ήδη αναθεώρηση" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "Πρέπει να καθοριστεί κωδικός αναθεώρησης" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "Οι αναθεωρήσεις επιτρέπονται μόνο για προϊόντα συναρμολόγησης" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "Δεν μπορεί να γίνει αναθεώρηση προϊόντος προτύπου" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "Το γονικό προϊόν πρέπει να αντιστοιχεί στο ίδιο πρότυπο" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Υπάρχει ήδη είδος αποθέματος με αυτόν τον σειριακό αριθμό" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "Δεν επιτρέπεται διπλό IPN στις ρυθμίσεις προϊόντος" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "Υπάρχει ήδη διπλή αναθεώρηση προϊόντος." -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Υπάρχει ήδη προϊόν με αυτό το όνομα, IPN και αναθεώρηση." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Τα προϊόντα δεν μπορούν να αντιστοιχιστούν σε δομικές κατηγορίες προϊόντων!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Όνομα προϊόντος" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Είναι πρότυπο" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Είναι αυτό το προϊόν προϊόν προτύπου;" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Είναι αυτό το προϊόν παραλλαγή άλλου προϊόντος;" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Παραλλαγή του" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Περιγραφή προϊόντος (προαιρετικά)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Λέξεις-κλειδιά" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Λέξεις-κλειδιά προϊόντος για βελτίωση της ορατότητας στα αποτελέσματα αναζήτησης" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Κατηγορία προϊόντος" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Αριθμός αναθεώρησης ή έκδοσης προϊόντος" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Αναθεώρηση" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "Είναι αυτό το προϊόν αναθεώρηση άλλου προϊόντος;" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Αναθεώρηση του" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Πού αποθηκεύεται συνήθως αυτό το είδος;" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Προεπιλεγμένη λήξη" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Χρόνος λήξης (σε ημέρες) για είδη αποθέματος αυτού του προϊόντος" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Ελάχιστο απόθεμα" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Ελάχιστο επιτρεπτό επίπεδο αποθέματος" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Μονάδες μέτρησης για αυτό το προϊόν" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Μπορεί αυτό το προϊόν να κατασκευαστεί από άλλα προϊόντα;" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Μπορεί αυτό το προϊόν να χρησιμοποιηθεί για την κατασκευή άλλων προϊόντων;" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Έχει αυτό το προϊόν ιχνηλάτηση για μοναδικά είδη;" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "Μπορούν να καταχωρηθούν αποτελέσματα δοκιμών για αυτό το προϊόν;" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Μπορεί αυτό το προϊόν να αγοραστεί από εξωτερικούς προμηθευτές;" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Μπορεί αυτό το προϊόν να πωληθεί σε πελάτες;" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Είναι αυτό το προϊόν ενεργό;" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Κλειδωμένα προϊόντα δεν μπορούν να τροποποιηθούν" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "Είναι αυτό ένα εικονικό προϊόν, όπως προϊόν λογισμικού ή άδεια;" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "Το BOM έχει επικυρωθεί" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "Είναι το BOM για αυτό το προϊόν έγκυρο;" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Άθροισμα ελέγχου BOM" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Αποθηκευμένο άθροισμα ελέγχου BOM" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "Έλεγχος BOM από" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Ημερομηνία ελέγχου BOM" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Χρήστης δημιουργίας" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Ιδιοκτήτης υπεύθυνος για αυτό το προϊόν" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Πώληση πολλαπλάσιων" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Νόμισμα που χρησιμοποιείται για την προσωρινή αποθήκευση υπολογισμών τιμολόγησης" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Ελάχιστο κόστος BOM" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Ελάχιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Μέγιστο κόστος BOM" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Μέγιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Ελάχιστο κόστος αγοράς" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Ελάχιστο ιστορικό κόστος αγοράς" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Μέγιστο κόστος αγοράς" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Μέγιστο ιστορικό κόστος αγοράς" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Ελάχιστη εσωτερική τιμή" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Ελάχιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Μέγιστη εσωτερική τιμή" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Μέγιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Ελάχιστη τιμή προμηθευτή" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Ελάχιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Μέγιστη τιμή προμηθευτή" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Μέγιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Ελάχιστο κόστος παραλλαγής" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Υπολογισμένο ελάχιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Μέγιστο κόστος παραλλαγής" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Υπολογισμένο μέγιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Ελάχιστο κόστος" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Παράκαμψη ελάχιστου κόστους" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Μέγιστο κόστος" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Παράκαμψη μέγιστου κόστους" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Υπολογισμένο συνολικό ελάχιστο κόστος" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Υπολογισμένο συνολικό μέγιστο κόστος" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Ελάχιστη τιμή πώλησης" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Ελάχιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Μέγιστη τιμή πώλησης" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Μέγιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Ελάχιστο κόστος πώλησης" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Ελάχιστη ιστορική τιμή πώλησης" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Μέγιστο κόστος πώλησης" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Μέγιστη ιστορική τιμή πώλησης" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Προϊόν για απογραφή" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Αριθμός ειδών" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Αριθμός μεμονωμένων εγγραφών αποθέματος κατά τον χρόνο απογραφής" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Συνολικό διαθέσιμο απόθεμα κατά τον χρόνο απογραφής" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Ημερομηνία" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Ημερομηνία που πραγματοποιήθηκε η απογραφή" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Ελάχιστο κόστος αποθέματος" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Εκτιμώμενο ελάχιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Μέγιστο κόστος αποθέματος" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Εκτιμώμενο μέγιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "Κλιμακωτή τιμή πώλησης προϊόντος" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "Πρότυπο δοκιμής προϊόντος" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Μη έγκυρο όνομα προτύπου - πρέπει να περιλαμβάνει τουλάχιστον έναν αλφαριθμητικό χαρακτήρα" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Πρότυπα δοκιμών μπορούν να δημιουργηθούν μόνο για προϊόντα που είναι υπό δοκιμή" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "Υπάρχει ήδη πρότυπο δοκιμής με το ίδιο κλειδί για το προϊόν" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Όνομα δοκιμής" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Εισαγάγετε όνομα για τη δοκιμή" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "Κλειδί δοκιμής" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "Απλοποιημένο κλειδί για τη δοκιμή" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Περιγραφή δοκιμής" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Εισαγάγετε περιγραφή για αυτή τη δοκιμή" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "Είναι αυτή η δοκιμή ενεργή;" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Απαραίτητη" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Απαιτείται η επιτυχής ολοκλήρωση αυτής της δοκιμής;" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Απαιτεί τιμή" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή τιμή κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Απαιτεί συνημμένο" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή συνημμένο αρχείο κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "Έγκυρες επιλογές για αυτή τη δοκιμή (διαχωρισμένες με κόμμα)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση είναι κλειδωμένη" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση παραλλαγής είναι κλειδωμένη" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Επιλέξτε γονικό προϊόν" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Υποπροϊόν" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Επιλέξτε προϊόν που θα χρησιμοποιηθεί στο BOM" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Ποσότητα BOM για αυτό το στοιχείο BOM" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Αυτό το στοιχείο BOM είναι προαιρετικό" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Αυτό το στοιχείο BOM είναι αναλώσιμο (δεν παρακολουθείται στις εντολές παραγωγής)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "Ποσότητα ρύθμισης" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Επιπλέον απαιτούμενη ποσότητα για μια παραγωγή, για να ληφθούν υπόψη οι απώλειες ρύθμισης" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "Φθορά" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Εκτιμώμενη φθορά για μια παραγωγή, εκφρασμένη ως ποσοστό (0-100)" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "Πολλαπλάσιο στρογγυλοποίησης" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Στρογγυλοποίηση προς τα πάνω της απαιτούμενης ποσότητας παραγωγής στο πλησιέστερο πολλαπλάσιο αυτής της τιμής" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Αναφορά στοιχείου BOM" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Σημειώσεις στοιχείου BOM" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Άθροισμα ελέγχου" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Άθροισμα ελέγχου γραμμής BOM" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Επικυρωμένο" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Αυτό το στοιχείο BOM έχει επικυρωθεί" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Κληρονομείται" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Αυτό το στοιχείο BOM κληρονομείται από τα BOM για προϊόντα παραλλαγών" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Είδη αποθέματος για προϊόντα παραλλαγών μπορούν να χρησιμοποιηθούν για αυτό το στοιχείο BOM" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Η ποσότητα πρέπει να είναι ακέραια τιμή για προϊόντα με ιχνηλάτηση" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Πρέπει να καθοριστεί υποπροϊόν" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Εναλλακτικό στοιχείο BOM" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "Το εναλλακτικό προϊόν δεν μπορεί να είναι το ίδιο με το κύριο προϊόν" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Γονικό στοιχείο BOM" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Εναλλακτικό προϊόν" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Προϊόν 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Προϊόν 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Επιλέξτε σχετικό προϊόν" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Σημείωση για αυτή τη σχέση" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Δεν μπορεί να δημιουργηθεί σχέση προϊόντος μεταξύ ενός προϊόντος και του εαυτού του" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Υπάρχει ήδη διπλή σχέση" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Γονική κατηγορία" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Γονική κατηγορία προϊόντος" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Υποκατηγορίες" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Αποτελέσματα" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Αριθμός αποτελεσμάτων που έχουν καταγραφεί για αυτό το πρότυπο" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Νόμισμα αγοράς για αυτό το είδος αποθέματος" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Το αρχείο δεν είναι εικόνα" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Αρχικό προϊόν" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Επιλέξτε αρχικό προϊόν για αντιγραφή" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Αντιγραφή εικόνας" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Αντιγραφή εικόνας από το αρχικό προϊόν" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Αντιγραφή BOM" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Αντιγραφή λίστας υλικών (BOM) από το αρχικό προϊόν" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Αντιγραφή παραμέτρων" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Αντιγραφή δεδομένων παραμέτρων από το αρχικό προϊόν" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Αντιγραφή σημειώσεων" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Αντιγραφή σημειώσεων από το αρχικό προϊόν" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Αντιγραφή δοκιμών" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Αντιγραφή προτύπων δοκιμών από το αρχικό προϊόν" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Αρχική ποσότητα αποθέματος" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Καθορίστε αρχική ποσότητα αποθέματος για αυτό το προϊόν. Αν η ποσότητα είναι μηδέν, δεν προστίθεται απόθεμα" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Αρχική τοποθεσία αποθέματος" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Καθορίστε αρχική τοποθεσία αποθέματος για αυτό το προϊόν" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Επιλέξτε προμηθευτή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Επιλέξτε κατασκευαστή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Κωδικός προϊόντος κατασκευαστή" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος προμηθευτής" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος κατασκευαστής" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Υπάρχει ήδη προϊόν κατασκευαστή με αυτό το MPN" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Υπάρχει ήδη προϊόν προμηθευτή με αυτό το SKU" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Όνομα κατηγορίας" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Σε παραγωγή" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Ποσότητα αυτού του προϊόντος που βρίσκεται αυτή τη στιγμή σε παραγωγή" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Εκκρεμής ποσότητα αυτού του προϊόντος που έχει προγραμματιστεί για παραγωγή" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Είδη αποθέματος" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "Αναθεωρήσεις" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Συνολικό απόθεμα" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Μη δεσμευμένο απόθεμα" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Απόθεμα παραλλαγών" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Αντιγραφή προϊόντος" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Αντιγραφή αρχικών δεδομένων από άλλο προϊόν" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Αρχικό απόθεμα" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Δημιουργία προϊόντος με αρχική ποσότητα αποθέματος" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Πληροφορίες προμηθευτή" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Προσθήκη αρχικών πληροφοριών προμηθευτή για αυτό το προϊόν" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Αντιγραφή παραμέτρων κατηγορίας" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Αντιγραφή προτύπων παραμέτρων από την επιλεγμένη κατηγορία προϊόντος" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Υπάρχουσα εικόνα" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Όνομα αρχείου υπάρχουσας εικόνας προϊόντος" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Το αρχείο εικόνας δεν υπάρχει" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Επικύρωση ολόκληρης της λίστας υλικών (BOM)" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Μπορεί να παραχθεί" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Απαιτείται για εντολές παραγωγής" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Δεσμευμένο σε εντολές παραγωγής" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Απαιτείται για εντολές πώλησης" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Δεσμευμένο σε εντολές πώλησης" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Ελάχιστη τιμή" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Παράκαμψη υπολογισμένης τιμής για την ελάχιστη τιμή" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Νόμισμα ελάχιστης τιμής" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Μέγιστη τιμή" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Παράκαμψη υπολογισμένης τιμής για τη μέγιστη τιμή" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Νόμισμα μέγιστης τιμής" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Ενημέρωση" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Ενημέρωση τιμολόγησης για αυτό το προϊόν" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Δεν ήταν δυνατή η μετατροπή από τα δοθέντα νομίσματα σε {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Η ελάχιστη τιμή δεν πρέπει να είναι μεγαλύτερη από τη μέγιστη τιμή" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Η μέγιστη τιμή δεν πρέπει να είναι μικρότερη από την ελάχιστη τιμή" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Επιλέξτε τη γονική συναρμολόγηση" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Επιλέξτε το προϊόν Προϊόντος" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Επιλέξτε προϊόν από το οποίο θα αντιγραφεί το BOM" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Αφαίρεση υπαρχόντων δεδομένων" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Αφαίρεση υπαρχόντων στοιχείων BOM πριν την αντιγραφή" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Συμπερίληψη κληρονομημένων" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Συμπερίληψη στοιχείων BOM που κληρονομούνται από προϊόντα προτύπων" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Παράλειψη μη έγκυρων γραμμών" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Ενεργοποιήστε αυτή την επιλογή για να παραλείπονται οι μη έγκυρες γραμμές" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Αντιγραφή εναλλακτικών προϊόντων" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Αντιγραφή εναλλακτικών προϊόντων κατά την αντιγραφή στοιχείων BOM" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Ειδοποίηση χαμηλού αποθέματος" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Το διαθέσιμο απόθεμα για το {part.name} έχει πέσει κάτω από το καθορισμένο ελάχιστο επίπεδο" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Ειδοποίηση παλαιού αποθέματος" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "Έχετε 1 είδος αποθέματος που πλησιάζει την ημερομηνία λήξης του" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "Έχετε {item_count} είδη αποθέματος που πλησιάζουν την ημερομηνία λήξης τους" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Χωρίς ημερομηνία λήξης" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "Έληξε πριν από {abs(days_diff)} ημέρες" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Λήγει σήμερα" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} ημέρες" @@ -7580,64 +7620,77 @@ msgstr "Παρέχει υποστήριξη για σάρωση barcodes TME" msgid "The Supplier which acts as 'TME'" msgstr "Ο προμηθευτής που λειτουργεί ως 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Μόνο οι χρήστες προσωπικού μπορούν να διαχειρίζονται πρόσθετα" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Η εγκατάσταση πρόσθετων είναι απενεργοποιημένη" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Το πρόσθετο εγκαταστάθηκε με επιτυχία" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Το πρόσθετο εγκαταστάθηκε στο {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Το πρόσθετο δεν βρέθηκε στο μητρώο" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Το πρόσθετο δεν είναι πακεταρισμένο πρόσθετο" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Δεν βρέθηκε όνομα πακέτου πρόσθετου" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Μόνο οι χρήστες προσωπικού μπορούν να διαχειρίζονται πρόσθετα" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Η απεγκατάσταση προσθέτων είναι απενεργοποιημένη" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Το πρόσθετο δεν μπορεί να απεγκατασταθεί καθώς είναι αυτή τη στιγμή ενεργό" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "Το πρόσθετο δεν μπορεί να απεγκατασταθεί καθώς είναι υποχρεωτικό" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "Το πρόσθετο δεν μπορεί να απεγκατασταθεί καθώς είναι δείγμα πρόσθετου" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "Το πρόσθετο δεν μπορεί να απεγκατασταθεί καθώς είναι ενσωματωμένο πρόσθετο" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Το πρόσθετο δεν είναι εγκατεστημένο" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Η εγκατάσταση του πρόσθετου δεν βρέθηκε" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Το πρόσθετο απεγκαταστάθηκε με επιτυχία" @@ -7689,21 +7742,21 @@ msgstr "Πρόσθετο πακέτου" msgid "Plugin" msgstr "Πρόσθετο" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Δεν βρέθηκε δημιουργός" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Το πρόσθετο '{p}' δεν είναι συμβατό με την τρέχουσα έκδοση InvenTree {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Το πρόσθετο απαιτεί τουλάχιστον την έκδοση {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Το πρόσθετο απαιτεί το πολύ την έκδοση {v}" @@ -7884,51 +7937,51 @@ msgstr "Η εγκατάσταση δεν επιβεβαιώθηκε" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Πλήρης επαναφόρτωση" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Εκτέλεση πλήρους επαναφόρτωσης του μητρώου προσθέτων" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Εξαναγκασμένη επαναφόρτωση" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Εξαναγκασμένη επαναφόρτωση του μητρώου προσθέτων, ακόμη κι αν είναι ήδη φορτωμένο" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Συλλογή προσθέτων" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Συλλογή προσθέτων και προσθήκη τους στο μητρώο" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Ενεργοποίηση πρόσθετου" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Ενεργοποίηση αυτού του πρόσθετου" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Υποχρεωτικό πρόσθετο δεν μπορεί να απενεργοποιηθεί" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Διαγραφή ρύθμισης" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Διαγραφή της ρύθμισης του πρόσθετου από τη βάση δεδομένων" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "Ο χρήστης στον οποίο εφαρμόζεται αυτή η ρύθμιση" @@ -8190,7 +8243,7 @@ msgstr "Σύνολο" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Σειριακός αριθμός" @@ -8215,7 +8268,7 @@ msgstr "Αναφορά δοκιμών είδους αποθέματος" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Εγκατεστημένα είδη" @@ -8248,184 +8301,196 @@ msgstr "Χωρίς αποτέλεσμα (υποχρεωτικό)" msgid "No result" msgstr "Χωρίς αποτέλεσμα" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Το αρχείο πόρου δεν υπάρχει" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Το αρχείο εικόνας δεν βρέθηκε" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "Το tag part_image απαιτεί μία παρουσία Aντικειμένου" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "Το tag company_image απαιτεί ένα Aντικειμένου Company" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Φιλτράρισμα ανά βάθος τοποθεσίας" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Φιλτράρισμα κατά τοποθεσίες ανώτατου επιπέδου" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Συμπερίληψη υποτοποθεσιών στα φιλτραρισμένα αποτελέσματα" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Γονική τοποθεσία" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Φιλτράρισμα βάσει γονικής τοποθεσίας" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Όνομα προϊόντος (χωρίς διάκριση πεζών/κεφαλαίων)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Το όνομα προϊόντος περιέχει (χωρίς διάκριση πεζών/κεφαλαίων)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Όνομα προϊόντος (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "IPN προϊόντος (χωρίς διάκριση πεζών/κεφαλαίων)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Το IPN προϊόντος περιέχει (χωρίς διάκριση πεζών/κεφαλαίων)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "IPN προϊόντος (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Ελάχιστο απόθεμα" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Μέγιστο απόθεμα" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Κωδικός κατάστασης" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Εξωτερική τοποθεσία" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Αναλωμένο από εντολή παραγωγής" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Εγκατεστημένο σε άλλο είδος αποθέματος" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Δέντρο προϊόντος" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Ενημερώθηκε πριν από" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Ενημερώθηκε μετά από" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Απογραφή πριν από" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Απογραφή μετά από" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Ημερομηνία λήξης πριν από" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Ημερομηνία λήξης μετά από" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Παλαιωμένο" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Δώστε ένα PK είδους αποθέματος για να εξαιρεθεί αυτό και όλοι οι απόγονοί του" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "Διαδοχικές τοποθεσίες" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "Αν είναι true, περιλαμβάνει είδη σε θυγατρικές τοποθεσίες της δεδομένης τοποθεσίας" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Φιλτράρισμα κατά αριθμητικό ID τοποθεσίας ή τη λέξη 'null'" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Απαιτείται ποσότητα" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Πρέπει να δοθεί έγκυρο προϊόν" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Το δοθέν προϊόν προμηθευτή δεν υπάρχει" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Το προϊόν προμηθευτή έχει ορισμένο μέγεθος συσκευασίας, αλλά η σημαία use_pack_size δεν έχει τεθεί" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Δεν μπορούν να δοθούν σειριακοί αριθμοί για μη ιχνηλάσιμο προϊόν" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "Συμπερίληψη εγκατεστημένων" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "Αν είναι true, περιλαμβάνει αποτελέσματα δοκιμών για είδη που είναι εγκατεστημένα κάτω από το συγκεκριμένο είδος αποθέματος" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "Φιλτράρισμα κατά αριθμητικό ID είδους αποθέματος" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "Είδος αποθέματος με ID {id} δεν υπάρχει" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "Τύποι τοποθεσίας αποθέματος" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Προεπιλεγμένο εικονίδιο για όλες τις τοποθεσίες που δεν έχουν ορισμένο εικονίδιο (προαιρετικό)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Τοποθεσία αποθέματος" @@ -8449,11 +8514,11 @@ msgstr "Τοποθεσία αποθέματος" msgid "Stock Locations" msgstr "Τοποθεσίες αποθέματος" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Ιδιοκτήτης" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Επιλέξτε ιδιοκτήτη" @@ -8481,274 +8546,274 @@ msgstr "Ο τύπος τοποθεσίας αποθέματος για αυτή msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Δεν μπορείτε να κάνετε αυτή την τοποθεσία αποθέματος δομική, επειδή κάποια είδη αποθέματος είναι ήδη τοποθετημένα σε αυτή!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "Το {field} δεν υπάρχει" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Πρέπει να καθοριστεί προϊόν" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Τα είδη αποθέματος δεν μπορούν να τοποθετηθούν σε δομικές τοποθεσίες αποθέματος!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Δεν μπορεί να δημιουργηθεί είδος αποθέματος για εικονικά προϊόντα" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Ο τύπος προϊόντος ('{self.supplier_part.part}') πρέπει να είναι {self.part}" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Η ποσότητα πρέπει να είναι 1 για είδος με σειριακό αριθμό" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Δεν μπορεί να οριστεί σειριακός αριθμός αν η ποσότητα είναι μεγαλύτερη από 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Το είδος δεν μπορεί να ανήκει στον εαυτό του" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Το είδος πρέπει να έχει αναφορά παραγωγής αν is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Η αναφορά παραγωγής δεν αντιστοιχεί στο ίδιο προϊόν" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Γονικό είδος αποθέματος" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Βασικό προϊόν" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Επιλέξτε αντίστοιχο προϊόν προμηθευτή για αυτό το είδος αποθέματος" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Πού βρίσκεται αυτό το είδος αποθέματος;" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Συσκευασία στην οποία αποθηκεύεται αυτό το είδος αποθέματος" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Εγκατεστημένο σε" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Είναι αυτό το είδος εγκατεστημένο σε άλλο είδος;" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Σειριακός αριθμός για αυτό το είδος" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Κωδικός παρτίδας για αυτό το είδος αποθέματος" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Ποσότητα αποθέματος" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Πηγή παραγωγής" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Εντολή παραγωγής για αυτό το είδος αποθέματος" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Έχει αναλωθεί από" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Εντολή παραγωγής που κατανάλωσε αυτό το είδος αποθέματος" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Πηγή εντολής αγοράς" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Εντολή αγοράς για αυτό το είδος αποθέματος" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Εντολή πώλησης προορισμού" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Ημερομηνία λήξης για το είδος αποθέματος. Το απόθεμα θα θεωρείται ληγμένο μετά από αυτή την ημερομηνία" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Διαγραφή κατά την εξάντληση" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Διαγραφή αυτού του είδους αποθέματος όταν εξαντληθεί" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Τιμή αγοράς ανά μονάδα κατά τον χρόνο αγοράς" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Μετατράπηκε σε προϊόν" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "Η ποσότητα υπερβαίνει το διαθέσιμο απόθεμα" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Το προϊόν δεν έχει οριστεί ως ιχνηλάσιμο" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Η ποσότητα πρέπει να είναι ακέραιος αριθμός" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Η ποσότητα δεν πρέπει να υπερβαίνει το διαθέσιμο απόθεμα ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Οι σειριακοί αριθμοί πρέπει να δοθούν ως λίστα" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Η ποσότητα δεν αντιστοιχεί στους σειριακούς αριθμούς" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Το πρότυπο δοκιμής δεν υπάρχει" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Το είδος αποθέματος έχει αντιστοιχιστεί σε εντολή πώλησης" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Το είδος αποθέματος είναι εγκατεστημένο σε άλλο είδος" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Το είδος αποθέματος περιέχει άλλα είδη" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Το είδος αποθέματος έχει αντιστοιχιστεί σε πελάτη" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Το είδος αποθέματος βρίσκεται αυτή τη στιγμή σε παραγωγή" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Σειριακό απόθεμα δεν μπορεί να συγχωνευθεί" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Διπλότυπα είδη αποθέματος" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Τα είδη αποθέματος πρέπει να αναφέρονται στο ίδιο προϊόν" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Τα είδη αποθέματος πρέπει να αναφέρονται στο ίδιο προϊόν προμηθευτή" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Οι κωδικοί κατάστασης αποθέματος πρέπει να ταιριάζουν" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Το StockItem δεν μπορεί να μετακινηθεί καθώς δεν βρίσκεται σε απόθεμα" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Ιχνηλάτηση είδους αποθέματος" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Σημειώσεις καταχώρησης" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Αποτέλεσμα δοκιμής είδους αποθέματος" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Πρέπει να δοθεί τιμή για αυτή τη δοκιμή" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Πρέπει να μεταφορτωθεί συνημμένο για αυτή τη δοκιμή" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Μη έγκυρη τιμή για αυτή τη δοκιμή" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Αποτέλεσμα δοκιμής" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Τιμή αποτελέσματος δοκιμής" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Συνημμένο αποτελέσματος δοκιμής" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Σημειώσεις δοκιμής" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "Σταθμός δοκιμής" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Ο αναγνωριστικός κωδικός του σταθμού δοκιμής όπου πραγματοποιήθηκε η δοκιμή" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "Έναρξη" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Χρονική σήμανση έναρξης της δοκιμής" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "Ολοκλήρωση" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Χρονική σήμανση λήξης της δοκιμής" @@ -8792,246 +8857,246 @@ msgstr "Επιλέξτε προϊόν για το οποίο θα δημιουρ msgid "Quantity of serial numbers to generate" msgstr "Ποσότητα σειριακών αριθμών προς δημιουργία" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "Πρότυπο δοκιμής για αυτό το αποτέλεσμα" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "Δεν βρέθηκε αντίστοιχη δοκιμή για αυτό το προϊόν" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "Πρέπει να δοθεί Template ID ή όνομα δοκιμής" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "Η ώρα λήξης της δοκιμής δεν μπορεί να είναι προγενέστερη της ώρας έναρξης" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Γονικό είδος" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "Γονικό είδος αποθέματος" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Χρήση μεγέθους συσκευασίας κατά την προσθήκη: η καθορισμένη ποσότητα είναι ο αριθμός των συσκευασιών" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "Χρήση μεγέθους συσκευασίας" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Εισαγάγετε σειριακούς αριθμούς για νέα είδη" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Κωδικός προϊόντος προμηθευτή" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Ληγμένο" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Θυγατρικά είδη" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "Εγγραφές ιχνηλάτησης" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Τιμή αγοράς αυτού του είδους αποθέματος, ανά μονάδα ή συσκευασία" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Εισαγάγετε τον αριθμό ειδών αποθέματος για σειριοποίηση" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "Δεν δόθηκε είδος αποθέματος" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Η ποσότητα δεν πρέπει να υπερβαίνει το διαθέσιμο απόθεμα ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Τοποθεσία προορισμού αποθέματος" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Δεν μπορούν να εκχωρηθούν σειριακοί αριθμοί σε αυτό το προϊόν" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Οι σειριακοί αριθμοί υπάρχουν ήδη" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Επιλέξτε είδος αποθέματος προς εγκατάσταση" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Ποσότητα προς εγκατάσταση" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Εισαγάγετε την ποσότητα των ειδών προς εγκατάσταση" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Προσθέστε σημείωση συναλλαγής (προαιρετικά)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "Η ποσότητα προς εγκατάσταση πρέπει να είναι τουλάχιστον 1" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Το είδος αποθέματος δεν είναι διαθέσιμο" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "Το επιλεγμένο προϊόν δεν βρίσκεται στο Δελτίο Υλικών (BOM)" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "Η ποσότητα προς εγκατάσταση δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Τοποθεσία προορισμού για το απεγκατεστημένο είδος" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Επιλέξτε προϊόν στο οποίο θα μετατραπεί το είδος αποθέματος" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "Το επιλεγμένο προϊόν δεν είναι έγκυρη επιλογή για μετατροπή" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Δεν είναι δυνατή η μετατροπή είδους αποθέματος με εκχωρημένο SupplierPart" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Κωδικός κατάστασης είδους αποθέματος" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Επιλέξτε είδη αποθέματος για αλλαγή κατάστασης" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Δεν επιλέχθηκαν είδη αποθέματος" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Υποτοποθεσίες" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "Γονική τοποθεσία αποθέματος" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Το προϊόν πρέπει να είναι διαθέσιμο για πώληση" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "Το είδος έχει δεσμευτεί σε εντολή πώλησης" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "Το είδος έχει δεσμευτεί σε εντολή παραγωγής" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Πελάτης στον οποίο θα αποδοθούν τα είδη αποθέματος" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "Η επιλεγμένη εταιρεία δεν είναι πελάτης" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Σημειώσεις απόδοσης αποθέματος" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Πρέπει να δοθεί λίστα ειδών αποθέματος" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Σημειώσεις συγχώνευσης αποθέματος" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Να επιτρέπονται διαφορετικοί προμηθευτές" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Να επιτρέπεται η συγχώνευση ειδών αποθέματος με διαφορετικά προϊόντα προμηθευτή" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Να επιτρέπεται διαφορετική κατάσταση" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Να επιτρέπεται η συγχώνευση ειδών αποθέματος με διαφορετικούς κωδικούς κατάστασης" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Πρέπει να δοθούν τουλάχιστον δύο είδη αποθέματος" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Καμία αλλαγή" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Τιμή πρωτεύοντος κλειδιού StockItem" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "Το είδος δεν βρίσκεται σε απόθεμα" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "Το είδος βρίσκεται ήδη σε απόθεμα" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "Η ποσότητα δεν πρέπει να είναι αρνητική" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Σημειώσεις συναλλαγής αποθέματος" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "Συγχώνευση με υπάρχον απόθεμα" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "Συγχώνευση επιστρεφόμενων ειδών με υπάρχοντα είδη αποθέματος, όπου είναι δυνατό" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "Επόμενος σειριακός αριθμός" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "Προηγούμενος σειριακός αριθμός" @@ -9537,59 +9602,75 @@ msgstr "Το επώνυμο του χρήστη" msgid "Email address of the user" msgstr "Διεύθυνση email του χρήστη" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Προσωπικό" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Διαθέτει ο χρήστης δικαιώματα προσωπικού;" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Υπερχρήστης" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Είναι ο χρήστης υπερχρήστης;" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Είναι ο λογαριασμός χρήστη ενεργός;" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "Μόνο υπερχρήστης μπορεί να τροποποιήσει αυτό το πεδίο" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "Κωδικός πρόσβασης" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "Κωδικός πρόσβασης του χρήστη" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "Παράβλεψη προειδοποίησης" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "Παράβλεψη της προειδοποίησης σχετικά με τους κανόνες κωδικού πρόσβασης" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "Δεν έχετε δικαίωμα δημιουργίας χρηστών" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Ο λογαριασμός σας δημιουργήθηκε." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Παρακαλούμε χρησιμοποιήστε τη λειτουργία επαναφοράς κωδικού πρόσβασης για να συνδεθείτε" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Καλώς ήρθατε στο InvenTree" diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po index ae45204f8c..12eb464543 100644 --- a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 20:20+0000\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -22,43 +22,35 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "" @@ -97,7 +89,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -113,13 +105,13 @@ msgstr "" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "" @@ -132,75 +124,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -208,11 +216,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -260,18 +268,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -282,7 +290,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "" @@ -314,75 +322,66 @@ msgstr "" msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -538,11 +537,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -554,30 +553,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -586,9 +585,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -597,151 +596,155 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -749,41 +752,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -791,234 +794,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1030,449 +1033,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1496,43 +1495,43 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1556,794 +1555,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2365,7 +2364,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2393,1235 +2392,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3966,346 +3973,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4317,7 +4324,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4453,7 +4460,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4465,31 +4472,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4589,7 +4596,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4717,105 +4724,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4823,8 +4842,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4840,11 +4859,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4852,718 +4871,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5599,146 +5642,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5751,7 +5794,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5779,7 +5822,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5800,7 +5843,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5844,981 +5887,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7581,64 +7621,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7690,21 +7743,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7885,51 +7938,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8191,7 +8244,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8216,7 +8269,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8249,184 +8302,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8442,7 +8507,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8450,11 +8515,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8482,274 +8547,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8793,246 +8858,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9538,58 +9603,74 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po index 53bc09c89f..d002e82cf2 100644 --- a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "endpoint API no encontrado" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Lista de artículos o filtros deben ser proporcionados para la operación en bloque" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Los artículos deben ser proporcionados como una lista" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Lista de artículos no válida" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Los filtros deben ser introducidos como un diccionario" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Filtros proporcionados inválidos" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Todos los filtros tienen que ser usados con verdadero" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Ningún artículo coincide con el criterio proporcionado" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Sin datos proporcionados" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "El usuario no tiene permiso para ver este modelo" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "No se pudo convertir {original} a {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" @@ -112,13 +104,13 @@ msgstr "Ingrese la fecha" msgid "Invalid decimal value" msgstr "Número decimal no válido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Notas" @@ -131,75 +123,91 @@ msgstr "El valor '{name}' no aparece en formato de patrón" msgid "Provided value does not match required pattern: " msgstr "El valor proporcionado no coincide con el patrón requerido: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "No se puede serializar más de 1000 elementos a la vez" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "No se ha proporcionado un número de serie" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Serie duplicada" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Grupo no válido {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Rango del grupo {group} supera la cantidad permitida ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Numeros de serie no encontrados" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "El número de números de serie únicos ({n}) tiene que coincidir con la cantidad ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Eliminar etiquetas HTML de este valor" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Los datos contienen contenido de marcado prohibido" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Error de conexión" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "El servidor respondió con código de estado no válido" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Se ha producido una excepción" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "El servidor respondió con un valor de longitud de contenido inválido" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "El tamaño de la imagen es demasiado grande" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "La descarga de imagen excedió el tamaño máximo" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "El servidor remoto devolvió una respuesta vacía" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "La URL proporcionada no es un archivo de imagen válido" @@ -207,11 +215,11 @@ msgstr "La URL proporcionada no es un archivo de imagen válido" msgid "Log in to the app" msgstr "Iniciar sesión en la aplicación" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Correo electrónico" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Debe habilitar la autenticación de doble factor antes de continuar." @@ -259,18 +267,18 @@ msgstr "El número de referencia es demasiado grande" msgid "Invalid choice" msgstr "Selección no válida" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nombre" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Descripción" msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Ruta" @@ -313,75 +321,66 @@ msgstr "Hash único de datos de código de barras" msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Fallo en la tarea" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "La tarea en segundo plano '{f}' falló después de {n} intentos" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Error de servidor" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Se ha registrado un error por el servidor." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Imágen" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Imagen remota" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL de imagen remota" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "La descarga de imágenes desde la URL remota no está habilitada" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Error al descargar la imagen desde la URL remota" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Chino (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chino (Tradicional)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Actualización disponible" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "Una actualización para InvenTree está disponible" @@ -553,30 +552,30 @@ msgstr "Unidad física inválida" msgid "Not a valid currency code" msgstr "No es un código de moneda válido" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Estado del pedido" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Construcción o Armado Superior" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Incluye Variantes" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Incluye Variantes" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categoría" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Asignado a mí" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Asignadas a" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Creado antes" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Creado despues" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Tiene fecha inicial" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Fecha de inicio anterior" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Fecha de inicio después" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Tiene fecha límite" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Fecha objetivo antes" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Fecha objetivo después" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Completado antes" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Completado después" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Fecha Mínima" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Fecha Máxima" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Excluir Árbol" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Consumible" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montaje" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Comprobable" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Agotado" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "En pedido" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Construir órden" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Ubicación" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Salida" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Construir órdenes" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "BOM de ensamblado no ha sido validado" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "La orden de construcción no puede ser creado para una parte inactiva" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "La orden de construcción no puede ser creada para una parte desbloqueada" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Se debe especificar un usuario o grupo responsable" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "La parte del pedido de construcción no puede ser modificada" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "La fecha límite debe ser posterior a la fecha de inicio" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Número de orden de construcción o armado" msgid "Reference" msgstr "Referencia" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Breve descripción de la construcción (opcional)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Seleccionar parte a construir o armar" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referencia de orden de venta" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Ubicación de la fuente" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleccione la ubicación de donde tomar stock para esta construcción o armado (deje en blanco para tomar desde cualquier ubicación)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Ubicación de destino" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Seleccione la ubicación donde se almacenarán los artículos completados" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Cantidad a crear" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Número de objetos existentes a construir" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Elementos completados" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Número de productos en stock que se han completado" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Estado de la construcción" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Numero de lote" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Fecha de Creación" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Crear fecha de inicio" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Fecha de inicio programada para este pedido" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Fecha límite de finalización" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Fecha límite para la finalización de la construcción. La construcción estará vencida después de esta fecha." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Fecha de finalización" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "terminado por" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Usuario o grupo responsable de esta orden de construcción" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Link externo" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Enlace a URL externa" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Prioridad de construcción" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioridad de esta orden de construcción" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Código del proyecto" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Código de proyecto para esta orden de ensamble" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "No se pudo descargar la tarea para completar las asignaciones de construcción" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "El pedido {build} ha sido procesado" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Pedido #[order] ha sido procesado" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Los números de serie deben ser proporcionados para las partes rastreables" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "No se ha especificado salida de construcción" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "La construcción de la salida ya está completa" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "La salida de la construcción no coincide con el orden de construcción" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Construir línea de pedido" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Ensamblar equipo" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Cantidad" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Cantidad requerida para orden de ensamble" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de construcción o armado debe especificar un resultado o salida, ya que la parte maestra está marcada como rastreable" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "El artículo de almacén selelccionado no coincide con la línea BOM" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "La cantidad debe ser 1 para el stock serializado" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Artículo de stock" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Instalar en" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Artículo de stock de destino" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "La salida de construcción no coincide con la construcción padre" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "La parte de salida no coincide con la parte de la Orden de Construcción" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Esta salida de construcción ya ha sido completada" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Esta salida de construcción no está completamente asignada" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Ingrese la cantidad para la producción de la construcción" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Cantidad entera requerida, ya que la factura de materiales contiene partes rastreables" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Números de serie" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Introduzca los números de serie de salidas de construcción" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Asignar automáticamente los artículos requeridos con números de serie coincidentes" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Debe proporcionarse una lista de salidas de construcción" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar cualquier asignación de existencias para las salidas descartadas" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completar salidas si el inventario no se ha asignado completamente" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consume cualquier stock que ya ha sido asignado a esta construcción" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Eliminar cualquier salida de construcción que no se haya completado" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Aceptar como consumido por este pedido de construcción" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Cómo quieres manejar los artículos extra de inventario asignados a la orden de construcción" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceptar que los artículos de stock no se han asignado completamente a este pedido de construcción" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceptar que el número requerido de salidas de construcción no se han completado" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "La cantidad de construcción requerida aún no se ha completado" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Orden de construcción debe estar en estado de producción" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "La salida de la construcción debe apuntar a la misma construcción" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "La salida de la construcción debe especificarse para la asignación de partes rastreadas" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La salida de construcción no se puede especificar para la asignación de partes no rastreadas" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Ubicación de inventario donde las partes deben ser obtenidas (dejar en blanco para tomar de cualquier ubicación)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Excluir artículos de stock de esta ubicación seleccionada" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Los artículos de inventario en múltiples ubicaciones se pueden utilizar de forma intercambiable" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Asignar artículos de la BOM opcionales para construir la orden" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Error al iniciar la tarea de asignación automática" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Parte del proveedor" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "En espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Terminado" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Stock requerido para la orden de construcción" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Orden de construcción atrasada" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "El pedido de construcción {bo} está atrasado" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1555,794 +1554,794 @@ msgstr "Sin plugin" msgid "Project Code Label" msgstr "Etiqueta del código del proyecto" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Actualizado" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Fecha y hora de la última actualización" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Código único del proyecto" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Descripción del proyecto" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Usuario o grupo responsable de este projecto" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Tecla de ajustes" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Valor de ajuste" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "El valor elegido no es una opción válida" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "El valor debe ser un valor booleano" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "El valor debe ser un entero" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "El valor debe ser un número válido" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "El valor no pasa las comprobaciones de validación" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Cadena de clave debe ser única" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Usuario" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Precio" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Precio unitario a la cantidad especificada" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Punto final en el que se recibe este webhook" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Nombre para este webhook" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Activo" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Está activo este webhook" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token para el acceso" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Clave" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Secreto compartido para HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "ID de mensaje" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Identificador único para este mensaje" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Servidor" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Servidor desde el cual se recibió este mensaje" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Encabezado" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Encabezado del mensaje" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Cuerpo" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Cuerpo de este mensaje" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Endpoint en el que se recibió este mensaje" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Trabajado en" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "¿El trabajo en este mensaje ha terminado?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Id" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Título" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Enlace" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Publicado" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Autor" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Resumen" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Leer" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "¿Esta noticia ya fue leída?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Archivo de imagen" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Unidad personalizada" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "El símbolo de la unidad debe ser único" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Nombre de unidad debe ser un identificador válido" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Nombre de unidad" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Símbolo de unidad opcional" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definición" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Definición de unidad" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Archivo adjunto" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Archivo no encontrado" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Falta enlace externo" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Seleccionar archivo para adjuntar" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Comentario" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Comentario de archivo adjunto" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Fecha de carga" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Fecha de carga del archivo" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Tamaño del archivo" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Llave lógica" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Nombre del estado" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que se mostrará en el frontend" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Color" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Color que se mostrará en el frontend" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Modelo" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "El modelo debe ser seleccionado" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "La clave debe ser seleccionada" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "La clave lógica debe ser seleccionada" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Lista de selección" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Listas de Selección" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Nombre de la lista de selección" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Descripción de la lista de selección" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "¿Está bloqueada esta lista de selección?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "¿Se puede utilizar esta lista de selección?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Complemento de origen" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Complemento que proporciona la lista de selección" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Cadena de origen" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Cadena opcional que identifica la fuente usada para esta lista" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Entrada por defecto" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Entrada predeterminada para esta lista de selección" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Creado" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Fecha y hora en la que se creó la lista de selección" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Última actualización" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Fecha y hora en que la lista de selección fue actualizada por última vez" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Entrada de lista de selección" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Entradas de la lista de selección" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Lista de selección a la que pertenece esta entrada" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Valor del elemento de la lista de selección" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Etiqueta para la entrada de lista de selección" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Descripción de la entrada de lista de selección" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "¿Está activa esta entrada de la lista de selección?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Plantilla de parámetro" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "El nombre de parámetro en la plantilla tiene que ser único" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Nombre de Parámetro" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Unidades" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Casilla de verificación" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Opciones" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opciones válidas para este parámetro (separados por comas)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Plantilla" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Datos" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Nota" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Campo de nota opcional" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Escanear código de barras" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Datos de código de barras" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Usuario que escaneó el código de barras" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Fecha y hora del escaneo de código de barras" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "Dispositivo URL que procesó el código de barras" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Datos de contexto para el escaneo de código de barras" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Respuesta" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Respuesta de datos del escaneo de código de barras" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "¿El escaneo de código de barras fue exitoso?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clave" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} cancelado" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Artículos Recibidos" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Está en ejecución" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Tareas pendientes" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tareas Programadas" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tareas fallidas" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "Identificación de Tarea" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Identificación de tarea única" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Bloquear hora" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Nombre de la tarea" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Función" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Nombre de la Función" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumentos de la tarea" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argumentos de palabra clave" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argumentos de palabra clave de tarea" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Nombre de Archivo" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "El usuario no tiene permiso para crear o editar archivos adjuntos para este modelo" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista de selección bloqueada" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Sin grupo" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "La URL del sitio está bloqueada por su configuración" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Reinicio requerido" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Se ha cambiado una configuración que requiere un reinicio del servidor" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migraciones pendientes" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Número de migraciones de base de datos pendientes" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Identificador único para esta instancia de InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nombre de la instancia del servidor" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Descriptor de cadena para la instancia del servidor" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Usar nombre de instancia" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Utilice el nombre de la instancia en la barra de título" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Restringir mostrar 'acerca de'" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Mostrar la modal `about` solo para superusuarios" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nombre de empresa" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Nombre interno de empresa" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "URL Base" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "URL base para la instancia del servidor" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Moneda predeterminada" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Seleccione la moneda base para los cálculos de precios" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Monedas admitidas" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Listado de códigos de divisa soportados" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Intervalo de actualización de moneda" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Con qué frecuencia actualizar los tipos de cambio (establecer a cero para desactivar)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "días" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Plugin de Actualización de Moneda" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Plugin de actualización de moneda a usar" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Descargar desde URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Permitir la descarga de imágenes y archivos remotos desde la URL externa" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Límite de tamaño de descarga" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Tamaño máximo de descarga permitido para la imagen remota" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "Agente de usuario usado para descargar desde la URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir reemplazar el agente de usuario utilizado para descargar imágenes y archivos desde URL externa (dejar en blanco para el valor predeterminado)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Validación estricta de URL" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Requerir especificación de esquema al validar URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Actualizar intervalo de actualización" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Con qué frecuencia comprobar actualizaciones (establecer a cero para desactivar)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Copia de seguridad automática" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Activar copia de seguridad automática de los archivos de base de datos y medios" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Intervalo de respaldo automático" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Especificar número de días entre eventos automatizados de copia de seguridad" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Intervalo de eliminación de tareas" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Los resultados de las tareas en segundo plano se eliminarán después del número especificado de días" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Intervalo de eliminación de registro de errores" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Los registros de errores se eliminarán después del número especificado de días" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Intervalo de eliminación de notificaciones" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Las notificaciones de usuario se eliminarán después del número especificado de días" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Soporte de código de barras" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Habilitar el soporte para escáner de códigos de barras en la interfaz web" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Guardar resultados de código de barras" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Guardar resultados de código de barras en la base de datos" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Número máximo de escaneos de código de barras" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Número máximo de resultados de escaneo de código de barras para almacenar" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Retraso de entrada de código de barras" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Tiempo de retraso en la lectura de códigos de barras" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Soporte para Webcam de código de barras" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir escaneo de código de barras a través de webcam en el navegador" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Mostrar datos del código de barra como texto en el navegador" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Complemento para generar códigos de barra" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Complemento a usar para la generación de datos de códigos de barra internos" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Revisiones de partes" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisión para parte" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Patrón de expresión regular para IPN de la parte coincidente" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Permitir IPN duplicado" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que varias partes compartan el mismo IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Permitir editar IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Permite cambiar el valor de IPN mientras se edita una parte" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Copiar parte de datos BOM" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar datos BOM por defecto al duplicar una parte" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Copiar parámetros de parte" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Copiar parte de datos de prueba" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Copiar plantillas de parámetros de categoría" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Copiar plantillas de parámetros de categoría al crear una parte" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Las partes son plantillas por defecto" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Componente" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Las partes pueden ser usadas como subcomponentes por defecto" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Comprable" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Vendible" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Las partes se pueden vender por defecto" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Las partes son rastreables por defecto" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Las partes son virtuales por defecto" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Mostrar partes relacionadas" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Mostrar partes relacionadas para una parte" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Datos iniciales de existencias" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir la creación del stock inicial al añadir una nueva parte" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Datos iniciales del proveedor" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir la creación de datos iniciales del proveedor al agregar una nueva parte" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Formato de visualización de Nombre de Parte" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Formato para mostrar el nombre de la parte" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Icono por defecto de la categoría de parte" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Icono por defecto de la categoría de parte (vacío significa que no hay icono)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de lugares decimales en el precio" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Número mínimo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Máximo de lugares decimales en el precio" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Usar precios de proveedor" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir descuentos de precios del proveedor en los cálculos generales de precios" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Anulación del historial de compra" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "El precio histórico de compra anula los descuentos de precios del proveedor" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Usar precio del artículo de almacén" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar los precios de los datos de inventario introducidos manualmente para los cálculos de precios" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Edad del precio del artículo de almacén" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Excluir artículos de almacén anteriores a este número de días de los cálculos de precios" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Usar precios variantes" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir variantes de precios en los cálculos generales de precios" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Solo variantes activas" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Usar solo partes de variantes activas para calcular los precios de variantes" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Intervalo de reconstrucción de precios" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Número de días antes de que el precio de la parte se actualice automáticamente" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Precios internos" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Habilitar precios internos para partes" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Anulación del precio interno" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Si está disponible, los precios internos anulan los cálculos del rango de precios" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Habilitar impresión de etiquetas" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Habilitar impresión de etiquetas desde la interfaz web" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "PPP de la imagen de etiqueta" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolución DPI al generar archivos de imagen que suministrar para etiquetar complementos de impresión" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Habilitar informes" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Habilitar generación de informes" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Modo de depuración" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Generar informes en modo de depuración (salida HTML)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Registrar errores de reportes" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Registrar errores ocurridos al generar reportes" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Tamaño de página" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Tamaño de página predeterminado para informes PDF" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Forzar unidades de parámetro" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Si se proporcionan unidades, los valores de parámetro deben coincidir con las unidades especificadas" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Seriales únicos globalmente" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Los números de serie para los artículos de inventario deben ser únicos globalmente" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Eliminar existencias agotadas" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina el comportamiento por defecto al agotarse un artículo del inventario" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Plantilla de código de lote" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Plantilla para generar códigos de lote por defecto para artículos de almacén" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Expiración de stock" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Habilitar la funcionalidad de expiración de stock" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Vender existencias caducadas" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Permitir venta de existencias caducadas" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Tiempo histórico de Stock" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de días de artículos de stock se consideran obsoletos antes de caducar" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Crear Stock Caducado" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Permitir crear con stock caducado" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Control de Stock" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Habilitar control de propiedad sobre ubicaciones de stock y artículos" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Icono por defecto de ubicación de almacén" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Icono por defecto de ubicación de almacén (vacío significa que no hay icono)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Mostrar Articulos de Stock Instalados" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Mostrar los artículos de stock instalados en las tablas de stock" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Permitir transferencia Sin Existencias" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que artículos del inventario sin existencias puedan ser transferidos entre ubicaciones de inventario" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Armado" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Ensamblado" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Requerir Dueño Responsable" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Se debe asignar un dueño responsable a cada orden" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Requerir Parte Activa" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Impedir la creación de órdenes de fabricación para partes inactivas" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Requerir Parte Bloqueada" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Impedir la creación de órdenes de fabricación para partes bloqueadas" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Impedir la creación de órdenes de fabricación a menos que se haya validado la lista de materiales" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Prevenir la finalización de la orden de construcción hasta que todas las órdenes hijas estén cerradas" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Bloquear hasta que los Tests pasen" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Evitar que las construcciones sean completadas hasta que todas las pruebas requeridas pasen" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Habilitar órdenes de devolución" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Habilitar la funcionalidad de orden de devolución en la interfaz de usuario" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Patrón de referencia de orden de devolución" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Patrón requerido para generar el campo de referencia de devolución de la orden" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Editar ordenes de devolución completadas" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir la edición de ordenes de devolución después de que hayan sido completados" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Venta" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la orden de venta" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Envío Predeterminado de Ordenes de Venta" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar la creación de envío predeterminado con ordenes de entrega" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Editar Ordenes de Venta Completados" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir la edición de ordenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Marcar pedidos enviados como completados" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Los pedidos marcados como enviados se completarán automáticamente, evitando el estado de \"envío\"" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Patrón de Referencia de Orden de Compra" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Compra" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Editar Ordenes de Compra Completados" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir la edición de órdenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Convertir moneda" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Ordenes de compra" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automáticamente las órdenes de compra como completas cuando se reciben todos los artículos de línea" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Habilitar función de contraseña olvidada" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Activar la función olvido de contraseña en las páginas de inicio de sesión" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Habilitar registro" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Activar auto-registro para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Habilitar SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Habilitar SSO en las páginas de inicio de sesión" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Habilitar registro SSO" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Activar autoregistro a través de SSO para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "Habilitar sincronización de grupo SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Habilitar la sincronización de grupos de Inventree con grupos proporcionados por el IdP" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "Clave de grupo SSO" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "El nombre del atributo reclamado por el grupo proporcionado por el IdP" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "Mapa del grupo SSO" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Un mapeo de grupos SSO a grupos de Inventree locales. Si el grupo local no existe, se creará." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Eliminar grupos fuera de SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Email requerido" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Requiere usuario para suministrar correo al registrarse" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Auto-rellenar usuarios SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Rellenar automáticamente los datos de usuario de la cuenta SSO" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Correo dos veces" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Al registrarse pregunte dos veces a los usuarios por su correo" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Contraseña dos veces" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Al registrarse, preguntar dos veces a los usuarios por su contraseña" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Dominios permitidos" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir el registro a ciertos dominios (separados por comas, comenzando por @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Grupo al registrarse" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupo al que se asignan nuevos usuarios al registrarse. Si la sincronización de grupo SSO está activada, este grupo sólo se establece si no se puede asignar ningún grupo desde el IdP." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Forzar MFA" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Los usuarios deben utilizar seguridad multifactor." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Comprobar complementos al iniciar" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Comprobar que todos los complementos están instalados en el arranque - habilitar en entornos de contenedores" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Revisar actualizaciones del plugin" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Habilitar comprobaciones periódicas para actualizaciones de plugins instalados" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Habilitar integración de URL" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Habilitar plugins para añadir rutas de URL" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Habilitar integración de navegación" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Habilitar plugins para integrar en la navegación" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Habilitar integración de la aplicación" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Habilitar plugins para añadir aplicaciones" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Habilitar integración de programación" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Habilitar plugins para ejecutar tareas programadas" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Habilitar integración de eventos" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Habilitar plugins para responder a eventos internos" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Habilitar integración de interfaz" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Habilitar complementos para integrar en la interfaz de usuario" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Habilitar códigos de proyecto para rastrear proyectos" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Excluir Ubicaciones Externas" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Periodo de inventario automático" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Mostrar nombres completos de los usuarios" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Mostrar nombres completos de usuarios en lugar de nombres de usuario" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Habilitar datos de estación de prueba" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Habilitar la recolección de datos de estaciones de prueba para resultados de prueba" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "La parte está activa" msgid "Manufacturer is Active" msgstr "El fabricante está activo" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Tiene Stock" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Empresas" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Descripción de la empresa" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Descripción de la empresa" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Página web" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "URL del sitio web de la empresa" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Teléfono" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Teléfono de contacto" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Correo electrónico de contacto" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contacto" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Punto de contacto" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Enlace a información externa de la empresa" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "¿Esta empresa está activa?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "¿Es cliente?" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "¿Vendes artículos a esta empresa?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "¿Es proveedor?" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "¿Compras artículos de esta empresa?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "¿Es productor?" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "¿Esta empresa fabrica partes?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Moneda predeterminada utilizada para esta empresa" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Dirección" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Direcciones" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Seleccionar empresa" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Título de dirección" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Título que describe la entrada de dirección" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Dirección principal" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Establecer como dirección principal" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Línea 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Dirección línea 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Línea 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Dirección línea 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Código postal" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Ciudad/región" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Código postal de ciudad/región" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Estado/provincia" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Estado o provincia" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "País" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Dirección de país" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notas de envío de mensajería" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notas para el mensajero de envío" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Notas de envío internas" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notas de envío para uso interno" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Parte del fabricante" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Parte base" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Seleccionar parte" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Número de parte de fabricante" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL para el enlace de parte del fabricante externo" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Descripción de la parte del fabricante" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Las unidades de paquete deben ser compatibles con las unidades de partes de base" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Las unidades de paquete deben ser mayor que cero" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Proveedor" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Seleccionar parte del fabricante" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL del enlace de parte del proveedor externo" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "costo base" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Paquetes" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Embalaje de partes" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Cantidad de paquete" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Cantidad total suministrada en un solo paquete. Dejar vacío para artículos individuales." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "múltiple" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Pedido múltiple" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Cantidad disponible del proveedor" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilidad actualizada" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Fecha de última actualización de los datos de disponibilidad" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "Moneda predeterminada utilizada para este proveedor" msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "En Stock" @@ -4452,7 +4459,7 @@ msgstr "El campo no existe en el modelo destino" msgid "Selected field is read-only" msgstr "El campo seleccionado es de solo lectura" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Sesión de importación" @@ -4464,31 +4471,31 @@ msgstr "Campo" msgid "Column" msgstr "Columna" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Número de fila" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Datos de la fila original" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Errores" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Válido" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "Número de copias a imprimir para cada etiqueta" msgid "Connected" msgstr "Conectado" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Desconocido" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Referencia del pedido" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Destacado" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Tiene Código de Proyecto" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Creado por" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Creado antes de" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Creado después de" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "Tiene fecha inicial" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "Fecha de inicio anterior" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "Fecha de inicio después" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "Tiene fecha límite" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Fecha objetivo antes" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Fecha objetivo después" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Tiene Precio" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Completado antes de" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Completado después de" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Orden" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Componente interno" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Orden pendiente" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Completados" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Tiene envío" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Orden de compra" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Orden de compra" msgid "Sales Order" msgstr "Orden de Venta" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Precio Total" msgid "Total price for this order" msgstr "Precio total para este pedido" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Moneda de pedido" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Moneda para este pedido (dejar en blanco para utilizar el valor predeterminado de la empresa)" @@ -4851,718 +4870,742 @@ msgstr "Moneda para este pedido (dejar en blanco para utilizar el valor predeter msgid "This order is locked and cannot be modified" msgstr "Este pedido está bloqueado y no puede ser modificado" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "El contacto no coincide con la empresa seleccionada" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "La fecha de inicio debe ser anterior a la fecha de límite" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Descripción del pedido (opcional)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Seleccione el código del proyecto para este pedido" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Enlace a Url externa" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Fecha de inicio" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Fecha de inicio programada para este pedido" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Fecha esperada para la entrega del pedido. El pedido se retrasará después de esta fecha." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Fecha de emisión" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Fecha de expedición del pedido" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Usuario o grupo responsable de este pedido" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Punto de contacto para este pedido" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Dirección de la empresa para este pedido" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Referencia del pedido" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Estado" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Estado de la orden de compra" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Empresa de la cual se están encargando los artículos" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Referencia del proveedor" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Código de referencia de pedido del proveedor" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "recibido por" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "La fecha de pedido fue completada" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Destinación" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Destino para los artículos recibidos" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "El proveedor de la parte debe coincidir con el proveedor de PO" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "La partida no coincide con la orden de compra" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "La cantidad debe ser un número positivo" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Empresa a la que se venden los artículos" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Estado de la orden de venta" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Referencia del cliente " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Código de referencia de pedido del cliente" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Fecha de envío" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "La orden ya fue completada" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "La orden ya fue cancelada" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Sólo una orden abierta puede ser marcada como completa" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "El pedido no se puede completar porque hay envíos incompletos" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "El pedido no se puede completar ya que hay asignaciones incompletas" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "El pedido no se puede completar porque hay partidas incompletas" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "Este pedido está bloqueado y no puede ser modificado" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Cantidad del artículo" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Referencia de partida" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Notas de partida" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Fecha objetivo para esta partida (dejar en blanco para usar la fecha de destino de la orden)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Descripción de partida (opcional)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Contexto adicional para esta línea" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Precio unitario" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "La parte del proveedor debe coincidir con el proveedor" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Parte del proveedor" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Recibido" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Precio de Compra" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Precio de compra unitario" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Sólo las partes vendibles pueden ser asignadas a un pedido de venta" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Precio de Venta" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Precio de venta unitario" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Cantidad enviada" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Fecha del envío" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Fecha de entrega" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Fecha de entrega del envío" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Revisado por" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Número de envío" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Número de Seguimiento" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Información de seguimiento del envío" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Número de factura" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Número de referencia para la factura asociada" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "El envío ya ha sido enviado" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "El envío no tiene artículos de stock asignados" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "El artículo de stock no ha sido asignado" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "No se puede asignar el artículo de stock a una línea con una parte diferente" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "No se puede asignar stock a una línea sin una parte" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La cantidad de asignación no puede exceder la cantidad de stock" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "La orden de venta no coincide con el envío" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "El envío no coincide con el pedido de venta" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Línea" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Referencia del envío del pedido de venta" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Ítem" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Seleccionar artículo de stock para asignar" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Especificar la cantidad de asignación de stock" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Referencia de la orden de devolución" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Empresa de la cual se están devolviendo los artículos" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Estado de la orden de devolución" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Seleccionar el artículo a devolver del cliente" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Fecha de recepción" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Resultado" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Salida para esta partida" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Costo asociado con la devolución o reparación para esta partida" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID del Pedido" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID del pedido a duplicar" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Copiar líneas" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Copiar elementos de línea del pedido original" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Copiar líneas adicionales" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Copiar elementos extra de la línea del pedido original" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Copiar Parámetros" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Partidas" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplicar pedido" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Especificar opciones para duplicar este pedido" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "ID de pedido no válido" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcular precio de compra automáticamente con base en los datos del proveedor" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Introduzca el código de lote para los artículos de almacén entrantes" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "No se han encontrado coincidencias para los siguientes números de serie" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Los artículos sólo pueden ser recibidos contra pedidos en curso" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5598,146 +5641,146 @@ msgstr "Reembolso" msgid "Reject" msgstr "Rechazo" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Orden de compra atrasada" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "La orden de compra {po} está atrasada" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Orden de venta atrasada" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "La orden de venta {so} está atrasada" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Favoritos" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Profundidad" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtrar por profundidad de categoría" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Nivel superior" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtrar por categorías de nivel superior" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "En cascada" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Tiene resultados" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "Categoría de parte" msgid "Part Categories" msgstr "Categorías de parte" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Ubicación Predeterminada" @@ -5778,7 +5821,7 @@ msgstr "Palabras clave por defecto para partes en esta categoría" msgid "Icon" msgstr "Icono" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icono (opcional)" @@ -5799,7 +5842,7 @@ msgstr "Valor predeterminado" msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Partes" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Ya existe un artículo de almacén con este número de serie" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN duplicado no permitido en la configuración de partes" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "La revisión de parte duplicada ya existe." -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Parte con este nombre, IPN y revisión ya existe." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "¡No se pueden asignar partes a las categorías de partes estructurales!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Nombre de la parte" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Es plantilla" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "¿Es esta parte una parte de la plantilla?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Descripción de parte (opcional)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Palabras claves" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqueda" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Revisión de parte o número de versión" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Revisión" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Variante de" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "¿Dónde se almacena este artículo normalmente?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Expiración por defecto" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Stock mínimo" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Nivel mínimo de stock permitido" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Unidades de medida para esta parte" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "¿Se puede construir esta parte a partir de otras partes?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "¿Se puede utilizar esta parte para construir otras partes?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "¿Esta parte tiene seguimiento de objetos únicos?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "¿Se puede comprar esta parte a proveedores externos?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "¿Se puede vender esta parte a los clientes?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "¿Está activa esta parte?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Las partes bloqueadas no pueden ser editadas" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "¿Es ésta una parte virtual, como un producto de software o una licencia?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Suma de verificación de BOM" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Suma de verificación de BOM almacenada" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "BOM comprobado por" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Fecha BOM comprobada" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Creación de Usuario" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Fecha" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Las plantillas de prueba solo pueden ser creadas para partes de prueba" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Requerido" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "¿Esta prueba requiere un valor al agregar un resultado de la prueba?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "¿Esta prueba requiere un archivo adjunto al agregar un resultado de la prueba?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este artículo de BOM es consumible (no está rastreado en órdenes de construcción)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Validado" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este artículo BOM es heredado por BOMs para partes variantes" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Artículos de stock para partes variantes pueden ser usados para este artículo BOM" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sustituta no puede ser la misma que la parte principal" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Categoría principal de parte" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Subcategorías" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Moneda de compra de ítem de stock" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Copiar Parámetros" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "En construcción" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "El precio mínimo no debe ser mayor que el precio máximo" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "El precio máximo no debe ser inferior al precio mínimo" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluye artículos BOM que son heredados de partes con plantillas" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notificación por bajo stock" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "El stock disponible para {part.name} ha caído por debajo del nivel mínimo configurado" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "El complemento no está instalado" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Instalación del complemento no encontrada" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "Complemento" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "No se encontró autor" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "El complemento '{p}' no es compatible con la versión actual de InvenTree {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "El complemento requiere al menos la versión {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "El complemento requiere como máximo la versión {v}" @@ -7884,51 +7937,51 @@ msgstr "Instalación no confirmada" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Activar complemento" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Activar este complemento" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "Total" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Número de serie" @@ -8215,7 +8268,7 @@ msgstr "Artículo Stock Informe de prueba" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Elementos instalados" @@ -8248,184 +8301,196 @@ msgstr "Ningún resultado (requerido)" msgid "No result" msgstr "Sin resultados" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Ubicación principal" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtrar por ubicación principal" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Nombre de pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "El nombre de la pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Nombre de la pieza (expresión regular)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Pieza IPN (insensible a mayúsculas y minúsculas)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Pieza IPN (insensible a mayúsculas y minúsculas)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Pieza IPN (expresión regular)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Stock mínimo" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Stock máximo" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Código de estado" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Ubicación externa" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Instalado en otro artículo de existencias" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Árbol de piezas" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Actualizado antes" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Actualizado después" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Inventario antes" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Inventario después" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Desactualizado" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Cantidad requerida" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Debe suministrarse una parte válida" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Ubicación de Stock" @@ -8449,11 +8514,11 @@ msgstr "Ubicación de Stock" msgid "Stock Locations" msgstr "Ubicaciones de Stock" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Propietario" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Seleccionar Propietario" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Se debe especificar la pieza" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "La cantidad debe ser 1 para el artículo con un número de serie" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Número de serie no se puede establecer si la cantidad es mayor que 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "El objeto no puede pertenecer a sí mismo" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "El artículo debe tener una referencia de construcción si is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "La referencia de la construcción no apunta al mismo objeto de parte" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Artículo de stock padre" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Parte base" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Seleccione una parte del proveedor correspondiente para este artículo de stock" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "¿Dónde se encuentra este artículo de stock?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Empaquetar este artículo de stock se almacena en" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Instalado en" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "¿Está este artículo instalado en otro artículo?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Número de serie para este artículo" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Código de lote para este artículo de stock" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Cantidad de Stock" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Build de origen" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Build para este item de stock" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Consumido por" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Orden de compra de origen" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Orden de compra para este artículo de stock" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Orden de venta de destino" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Fecha de caducidad del artículo de stock. El stock se considerará caducado después de esta fecha" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Eliminar al agotar" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Eliminar este artículo de stock cuando se agoten las existencias" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Precio de compra único en el momento de la compra" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Convertido a parte" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "La parte no está establecida como rastreable" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Cantidad debe ser un entero" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Los números de serie deben ser proporcionados como una lista" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "La cantidad no coincide con los números de serie" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Artículo de stock ha sido asignado a un pedido de venta" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Artículo de stock está instalado en otro artículo" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Artículo de stock contiene otros artículos" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Artículo de stock ha sido asignado a un cliente" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "El artículo de stock está en producción" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Los artículos de stock deben referirse a la misma parte" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Los artículos de stock deben referirse a la misma parte del proveedor" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Los códigos de estado del stock deben coincidir" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stock no se puede mover porque no está en stock" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Notas de entrada" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Debe proporcionarse un valor para esta prueba" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "El archivo adjunto debe ser subido para esta prueba" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Resultado de la prueba" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Valor de salida de prueba" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Adjunto de resultados de prueba" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Notas de prueba" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "Finalizó" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Elemento padre" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Introduzca números de serie para nuevos artículos" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Número de pieza del proveedor" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Elementos secundarios" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Introduzca el número de artículos de stock para serializar" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Ubicación de stock de destino" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Los números de serie no se pueden asignar a esta parte" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Números de serie ya existen" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Añadir nota de transacción (opcional)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Sub-ubicación" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "La parte debe ser vendible" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "El artículo está asignado a una orden de venta" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "El artículo está asignado a una orden de creación" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Cliente para asignar artículos de stock" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "La empresa seleccionada no es un cliente" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Notas de asignación de stock" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Debe proporcionarse una lista de artículos de stock" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Notas de fusión de stock" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Permitir proveedores no coincidentes" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permitir fusionar artículos de stock con diferentes partes de proveedor" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Permitir estado no coincidente" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Permitir fusionar artículos de stock con diferentes códigos de estado" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Debe proporcionar al menos dos artículos de stock" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Sin cambios" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Valor de clave primaria de Stock" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "No hay existencias del artículo" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Notas de transacción de stock" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "Apellido del usuario" msgid "Email address of the user" msgstr "Dirección de correo del usuario" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personal" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Tiene este usuario permisos de personal" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Superusuario" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Es este usuario un superusuario" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Esta cuenta de usuario está activa" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Su cuenta ha sido creada." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Por favor, utilice la función de restablecer la contraseña para iniciar sesión" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Bienvenido a InvenTree" diff --git a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po index e9cc6ebe4e..44b89d5ad9 100644 --- a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "endpoint API no encontrado" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Lista de artículos o filtros deben ser proporcionados para la operación en bloque" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Los artículos deben ser provistos como una lista" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Lista de artículos inválida" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Los filtros deben ser provistos como un diccionario" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Filtros proporcionados inválidos" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Todos los filtros sólo deben ser usados como verdaderos" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Ningún artículo coincide con el criterio proporcionado" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "El usuario no tiene permiso para ver este modelo" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "No se pudo convertir {original} a {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" @@ -112,13 +104,13 @@ msgstr "Ingrese la fecha" msgid "Invalid decimal value" msgstr "Número decimal inválido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Notas" @@ -131,75 +123,91 @@ msgstr "El valor '{name}' no aparece en formato de patrón" msgid "Provided value does not match required pattern: " msgstr "El valor proporcionado no coincide con el patrón requerido: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "No se puede serializar más de 1000 artículos a la vez" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "No se ha proporcionado un número de serie" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Serie duplicada" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Grupo inválido: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Rango del grupo {group} supera la cantidad permitida ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Numeros de serie no encontrados" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "La cantidad de números de serie únicos ({n}) deben coincidir la cantidad ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Eliminar etiquetas HTML de este valor" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Los datos contienen contenido de markdown prohibido" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Error de conexión" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "El servidor respondió con código de estado no válido" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Se ha producido una excepción" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "El servidor respondió con un valor de longitud de contenido inválido" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "El tamaño de la imagen es demasiado grande" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "La descarga de imagen excedió el tamaño máximo" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "El servidor remoto devolvió una respuesta vacía" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "La URL proporcionada no es un archivo de imagen válido" @@ -207,11 +215,11 @@ msgstr "La URL proporcionada no es un archivo de imagen válido" msgid "Log in to the app" msgstr "Iniciar sesión en la aplicación" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Correo electrónico" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Debe habilitar la autenticación de doble factor antes de hacer cualquier otra cosa." @@ -259,18 +267,18 @@ msgstr "El número de referencia es demasiado grande" msgid "Invalid choice" msgstr "Selección no válida" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nombre" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Descripción" msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Ruta" @@ -313,75 +321,66 @@ msgstr "Hash único de datos de código de barras" msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Fallo en la tarea" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "La tarea en segundo plano '{f}' falló después de {n} intentos" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Error de servidor" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Se ha registrado un error por el servidor." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Imágen" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Imagen remota" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL de imagen remota" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "La descarga de imágenes desde la URL remota no está habilitada" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Error al descargar la imagen desde la URL remota" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Chino (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chino (Tradicional)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "Unidad física inválida" msgid "Not a valid currency code" msgstr "No es un código de moneda válido" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Estado del pedido" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Construcción o Armado Superior" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Incluye Variantes" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Incluye Variantes" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categoría" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Construir antepasado" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Asignado a mí" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Asignadas a" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Creado antes de" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Creado después de" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Tiene fecha inicial" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Fecha objetivo antes de" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Fecha objetivo después de" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Completado antes de" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Completado después de" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Consumible" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montaje" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Comprobable" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "En pedido" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Construir órden" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Ubicación" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Construir órdenes" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "BOM de ensamblado no ha sido validado" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "La orden de construcción no puede ser creado para una parte inactiva" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "La orden de construcción no puede ser creada para una parte desbloqueada" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Se debe especificar un usuario o grupo responsable" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "La parte del pedido de construcción no puede ser modificada" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Número de orden de construcción o armado" msgid "Reference" msgstr "Referencia" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Breve descripción de la construcción (opcional)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Seleccionar parte a construir o armar" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referencia de orden de venta" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Ubicación de la fuente" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleccione la ubicación de donde tomar stock para esta construcción o armado (deje en blanco para tomar desde cualquier ubicación)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Ubicación de destino" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Seleccione la ubicación donde se almacenarán los artículos completados" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Cantidad a crear" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Número de objetos existentes a construir" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Elementos completados" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Número de productos en stock que se han completado" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Estado de la construcción" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Numero de lote" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Fecha de Creación" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Fecha límite de finalización" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Fecha límite para la finalización de la construcción. La construcción estará vencida después de esta fecha." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Fecha de finalización" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "terminado por" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Usuario o grupo responsable de esta orden de construcción" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Link externo" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Enlace a URL externa" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Prioridad de construcción" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioridad de esta orden de construcción" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Código del proyecto" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Código de proyecto para esta orden de ensamble" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "No se pudo descargar la tarea para completar las asignaciones de construcción" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "El pedido {build} ha sido procesado" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Pedido #[order] ha sido procesado" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Los números de serie deben ser proporcionados para las partes rastreables" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "No se ha especificado salida de construcción" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "La construcción de la salida ya está completa" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "La salida de la construcción no coincide con el orden de construcción" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Construir línea de pedido" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Ensamblar equipo" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Cantidad" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Cantidad requerida para orden de ensamble" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de construcción o armado debe especificar un resultado o salida, ya que la parte maestra está marcada como rastreable" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "El artículo de almacén selelccionado no coincide con la línea BOM" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "La cantidad debe ser 1 para el stock serializado" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Artículo de stock" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Instalar en" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Artículo de stock de destino" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "La salida de construcción no coincide con la construcción padre" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "La parte de salida no coincide con la parte de la Orden de Construcción" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Esta salida de construcción ya ha sido completada" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Esta salida de construcción no está completamente asignada" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Ingrese la cantidad para la producción de la construcción" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Cantidad entera requerida, ya que la factura de materiales contiene partes rastreables" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Números de serie" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Introduzca los números de serie de salidas de construcción" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Asignar automáticamente los artículos requeridos con números de serie coincidentes" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Debe proporcionarse una lista de salidas de construcción" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar cualquier asignación de existencias para las salidas descartadas" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completar salidas si el inventario no se ha asignado completamente" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consume cualquier stock que ya ha sido asignado a esta construcción" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Eliminar cualquier salida de construcción que no se haya completado" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Aceptar como consumido por este pedido de construcción" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Cómo quieres manejar los artículos extra de inventario asignados a la orden de construcción" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceptar que los artículos de stock no se han asignado completamente a este pedido de construcción" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceptar que el número requerido de salidas de construcción no se han completado" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "La cantidad de construcción requerida aún no se ha completado" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Orden de construcción debe estar en estado de producción" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "La salida de la construcción debe apuntar a la misma construcción" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "La salida de la construcción debe especificarse para la asignación de partes rastreadas" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La salida de construcción no se puede especificar para la asignación de partes no rastreadas" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Ubicación de inventario donde las partes deben ser obtenidas (dejar en blanco para tomar de cualquier ubicación)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Excluir artículos de stock de esta ubicación seleccionada" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Los artículos de inventario en múltiples ubicaciones se pueden utilizar de forma intercambiable" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Asignar artículos de la BOM opcionales para construir la orden" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Error al iniciar la tarea de asignación automática" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Parte del proveedor" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "En espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Terminado" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Stock requerido para la orden de construcción" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Orden de construcción atrasada" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "El pedido de construcción {bo} está atrasado" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1555,794 +1554,794 @@ msgstr "Sin plugin" msgid "Project Code Label" msgstr "Etiqueta del código del proyecto" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Actualizado" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Fecha y hora de la última actualización" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Código único del proyecto" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Descripción del proyecto" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Usuario o grupo responsable de este projecto" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Tecla de ajustes" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Valor de ajuste" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "El valor elegido no es una opción válida" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "El valor debe ser un valor booleano" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "El valor debe ser un entero" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "El valor debe ser un número válido" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "El valor no pasa las comprobaciones de validación" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Cadena de clave debe ser única" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Usuario" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Precio" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Precio unitario a la cantidad especificada" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Punto final en el que se recibe este webhook" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Nombre para este webhook" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Activo" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Está activo este webhook" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token para el acceso" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Clave" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Secreto compartido para HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "ID de mensaje" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Identificador único para este mensaje" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Servidor desde el cual se recibió este mensaje" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Encabezado" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Encabezado del mensaje" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Cuerpo" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Cuerpo de este mensaje" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Endpoint en el que se recibió este mensaje" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Trabajado en" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "¿El trabajo en este mensaje ha terminado?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Título" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Enlace" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Publicado" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Autor" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Resumen" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Leer" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "¿Esta noticia ya fue leída?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Archivo de imagen" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "Tipo de modelo destino para esta imagen" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Unidad personalizada" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "El símbolo de la unidad debe ser único" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Nombre de unidad debe ser un identificador válido" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Nombre de unidad" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Símbolo de unidad opcional" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definición" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Definición de unidad" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Archivo adjunto" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Archivo no encontrado" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Falta enlace externo" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Seleccionar archivo para adjuntar" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Comentario" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Comentario de archivo adjunto" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Fecha de carga" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Fecha de carga del archivo" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Tamaño del archivo" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Conjunto de estado de referencia" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Conjunto de estado extendido con este estado personalizado" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Llave lógica" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "Clave lógica del estado que es igual a este estado personalizado en la lógica de negocios" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "Valor numérico que se guardará en la base de datos de modelos" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Nombre del estado" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que se mostrará en el frontend" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Color" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Color que se mostrará en el frontend" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Modelo" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "Modelo con el que este estado está asociado" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "El modelo debe ser seleccionado" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "La clave debe ser seleccionada" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "La clave lógica debe ser seleccionada" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "La clave debe ser distinta de la clave lógica" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Debe proporcionarse una clase de estado de referencia válida" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "La clave debe ser distinta de las claves lógicas del estado de referencia" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Lista de selección" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Listas de Selección" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Nombre de la lista de selección" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Descripción de la lista de selección" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "¿Está bloqueada esta lista de selección?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "¿Se puede utilizar esta lista de selección?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Complemento de origen" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Complemento que proporciona la lista de selección" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Cadena de origen" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Cadena opcional que identifica la fuente usada para esta lista" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Entrada por defecto" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Entrada predeterminada para esta lista de selección" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Creado" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Fecha y hora en la que se creó la lista de selección" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Última actualización" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Fecha y hora en que la lista de selección fue actualizada por última vez" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Entrada de lista de selección" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Entradas de la lista de selección" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Lista de selección a la que pertenece esta entrada" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Valor del elemento de la lista de selección" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Etiqueta para la entrada de lista de selección" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Descripción de la entrada de lista de selección" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "¿Está activa esta entrada de la lista de selección?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Plantilla de parámetro" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "El nombre de parámetro en la plantilla tiene que ser único" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Nombre de Parámetro" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Unidades" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Casilla de verificación" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Opciones" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opciones válidas para este parámetro (separados por comas)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Plantilla" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Datos" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Nota" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Campo de nota opcional" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Escanear código de barras" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Datos de código de barras" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Usuario que escaneó el código de barras" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Fecha y hora del escaneo de código de barras" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "Dispositivo URL que procesó el código de barras" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Datos de contexto para el escaneo de código de barras" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Respuesta" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Respuesta de datos del escaneo de código de barras" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "¿El escaneo de código de barras fue exitoso?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clave" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} cancelado" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Artículos Recibidos" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Está en ejecución" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Tareas pendientes" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tareas Programadas" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tareas fallidas" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "Identificación de Tarea" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Identificación de tarea única" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Bloquear hora" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Nombre de la tarea" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Función" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Nombre de la Función" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumentos de la tarea" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argumentos de palabra clave" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argumentos de palabra clave de tarea" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Nombre de Archivo" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista de selección bloqueada" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Sin grupo" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "La URL del sitio está bloqueada por su configuración" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Reinicio requerido" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Se ha cambiado una configuración que requiere un reinicio del servidor" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migraciones pendientes" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Número de migraciones de base de datos pendientes" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nombre de la instancia del servidor" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Descriptor de cadena para la instancia del servidor" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Usar nombre de instancia" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Utilice el nombre de la instancia en la barra de título" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Restringir mostrar 'acerca de'" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Mostrar la modal `about` solo para superusuarios" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nombre de empresa" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Nombre interno de empresa" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "URL Base" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "URL base para la instancia del servidor" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Moneda predeterminada" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Seleccione la moneda base para los cálculos de precios" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Monedas admitidas" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Listado de códigos de divisa soportados" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Intervalo de actualización de moneda" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Con qué frecuencia actualizar los tipos de cambio (establecer a cero para desactivar)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "días" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Plugin de Actualización de Moneda" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Plugin de actualización de moneda a usar" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Descargar desde URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Permitir la descarga de imágenes y archivos remotos desde la URL externa" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Límite de tamaño de descarga" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Tamaño máximo de descarga permitido para la imagen remota" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "Agente de usuario usado para descargar desde la URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir reemplazar el agente de usuario utilizado para descargar imágenes y archivos desde URL externa (dejar en blanco para el valor predeterminado)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Validación estricta de URL" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Requerir especificación de esquema al validar URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Actualizar intervalo de actualización" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Con qué frecuencia comprobar actualizaciones (establecer a cero para desactivar)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Copia de seguridad automática" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Activar copia de seguridad automática de los archivos de base de datos y medios" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Intervalo de respaldo automático" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Especificar número de días entre eventos automatizados de copia de seguridad" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Intervalo de eliminación de tareas" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Los resultados de las tareas en segundo plano se eliminarán después del número especificado de días" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Intervalo de eliminación de registro de errores" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Los registros de errores se eliminarán después del número especificado de días" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Intervalo de eliminación de notificaciones" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Las notificaciones de usuario se eliminarán después del número especificado de días" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Soporte de código de barras" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Habilitar el soporte para escáner de códigos de barras en la interfaz web" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Guardar resultados de código de barras" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Guardar resultados de código de barras en la base de datos" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Número máximo de escaneos de código de barras" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Número máximo de resultados de escaneo de código de barras para almacenar" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Retraso de entrada de código de barras" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Tiempo de retraso en la lectura de códigos de barras" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Soporte para Webcam de código de barras" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir escaneo de código de barras a través de webcam en el navegador" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Mostrar datos del código de barra como texto en el navegador" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Complemento para generar códigos de barra" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Complemento a usar para la generación de datos de códigos de barra internos" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Revisiones de partes" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisión para parte" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Patrón de expresión regular para IPN de la parte coincidente" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Permitir IPN duplicado" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que varias partes compartan el mismo IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Permitir editar IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Permite cambiar el valor de IPN mientras se edita una parte" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Copiar parte de datos BOM" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar datos BOM por defecto al duplicar una parte" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Copiar parámetros de parte" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Copiar parte de datos de prueba" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Copiar plantillas de parámetros de categoría" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Copiar plantillas de parámetros de categoría al crear una parte" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Las partes son plantillas por defecto" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Componente" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Las partes pueden ser usadas como subcomponentes por defecto" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Comprable" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Vendible" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Las partes se pueden vender por defecto" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Las partes son rastreables por defecto" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Las partes son virtuales por defecto" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Mostrar partes relacionadas" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Mostrar partes relacionadas para una parte" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Datos iniciales de existencias" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir la creación del stock inicial al añadir una nueva parte" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Datos iniciales del proveedor" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir la creación de datos iniciales del proveedor al agregar una nueva parte" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Formato de visualización de Nombre de Parte" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Formato para mostrar el nombre de la parte" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Icono por defecto de la categoría de parte" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Icono por defecto de la categoría de parte (vacío significa que no hay icono)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de lugares decimales en el precio" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Número mínimo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Máximo de lugares decimales en el precio" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Usar precios de proveedor" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir descuentos de precios del proveedor en los cálculos generales de precios" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Anulación del historial de compra" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "El precio histórico de compra anula los descuentos de precios del proveedor" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Usar precio del artículo de almacén" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar los precios de los datos de inventario introducidos manualmente para los cálculos de precios" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Edad del precio del artículo de almacén" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Excluir artículos de almacén anteriores a este número de días de los cálculos de precios" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Usar precios variantes" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir variantes de precios en los cálculos generales de precios" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Solo variantes activas" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Usar solo partes de variantes activas para calcular los precios de variantes" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Intervalo de reconstrucción de precios" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Número de días antes de que el precio de la parte se actualice automáticamente" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Precios internos" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Habilitar precios internos para partes" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Anulación del precio interno" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Si está disponible, los precios internos anulan los cálculos del rango de precios" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Habilitar impresión de etiquetas" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Habilitar impresión de etiquetas desde la interfaz web" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "PPP de la imagen de etiqueta" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolución DPI al generar archivos de imagen que suministrar para etiquetar complementos de impresión" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Habilitar informes" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Habilitar generación de informes" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Modo de depuración" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Generar informes en modo de depuración (salida HTML)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Registrar errores de reportes" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Registrar errores ocurridos al generar reportes" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Tamaño de página" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Tamaño de página predeterminado para informes PDF" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Forzar unidades de parámetro" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Si se proporcionan unidades, los valores de parámetro deben coincidir con las unidades especificadas" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Seriales únicos globalmente" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Los números de serie para los artículos de inventario deben ser únicos globalmente" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Eliminar existencias agotadas" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina el comportamiento por defecto al agotarse un artículo del inventario" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Plantilla de código de lote" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Plantilla para generar códigos de lote por defecto para artículos de almacén" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Expiración de stock" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Habilitar la funcionalidad de expiración de stock" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Vender existencias caducadas" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Permitir venta de existencias caducadas" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Tiempo histórico de Stock" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de días de artículos de stock se consideran obsoletos antes de caducar" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Crear Stock Caducado" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Permitir crear con stock caducado" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Control de Stock" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Habilitar control de propiedad sobre ubicaciones de stock y artículos" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Icono por defecto de ubicación de almacén" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Icono por defecto de ubicación de almacén (vacío significa que no hay icono)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Mostrar Articulos de Stock Instalados" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Mostrar los artículos de stock instalados en las tablas de stock" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Revisar BOM al instalar artículos" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Los elementos de stock instalados deben existir en la BOM para la parte padre" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Permitir transferencia Sin Existencias" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que artículos del inventario sin existencias puedan ser transferidos entre ubicaciones de inventario" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Armado" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Ensamblado" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Requerir Dueño Responsable" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Se debe asignar un dueño responsable a cada orden" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Requerir Parte Activa" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Impedir la creación de órdenes de fabricación para partes inactivas" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Requerir Parte Bloqueada" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Impedir la creación de órdenes de fabricación para partes bloqueadas" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Impedir la creación de órdenes de fabricación a menos que se haya validado la lista de materiales" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Prevenir la finalización de la orden de construcción hasta que todas las órdenes hijas estén cerradas" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Bloquear hasta que los Tests pasen" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Evitar que las construcciones sean completadas hasta que todas las pruebas requeridas pasen" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Habilitar órdenes de devolución" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Habilitar la funcionalidad de orden de devolución en la interfaz de usuario" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Patrón de referencia de orden de devolución" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Patrón requerido para generar el campo de referencia de devolución de la orden" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Editar ordenes de devolución completadas" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir la edición de ordenes de devolución después de que hayan sido completados" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Venta" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la orden de venta" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Envío Predeterminado de Ordenes de Venta" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar la creación de envío predeterminado con ordenes de entrega" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Editar Ordenes de Venta Completados" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir la edición de ordenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Marcar pedidos enviados como completados" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Los pedidos marcados como enviados se completarán automáticamente, evitando el estado de \"envío\"" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Patrón de Referencia de Orden de Compra" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Compra" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Editar Ordenes de Compra Completados" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir la edición de órdenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Ordenes de compra" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automáticamente las órdenes de compra como completas cuando se reciben todos los artículos de línea" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Habilitar función de contraseña olvidada" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Activar la función olvido de contraseña en las páginas de inicio de sesión" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Habilitar registro" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Activar auto-registro para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Habilitar SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Habilitar SSO en las páginas de inicio de sesión" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Habilitar registro SSO" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Activar autoregistro a través de SSO para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "Habilitar sincronización de grupo SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Habilitar la sincronización de grupos de Inventree con grupos proporcionados por el IdP" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "Clave de grupo SSO" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "El nombre del atributo reclamado por el grupo proporcionado por el IdP" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "Mapa del grupo SSO" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Un mapeo de grupos SSO a grupos de Inventree locales. Si el grupo local no existe, se creará." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Eliminar grupos fuera de SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Email requerido" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Requiere usuario para suministrar correo al registrarse" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Auto-rellenar usuarios SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Rellenar automáticamente los datos de usuario de la cuenta SSO" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Correo dos veces" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Al registrarse pregunte dos veces a los usuarios por su correo" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Contraseña dos veces" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Al registrarse, preguntar dos veces a los usuarios por su contraseña" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Dominios permitidos" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir el registro a ciertos dominios (separados por comas, comenzando por @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Grupo al registrarse" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupo al que se asignan nuevos usuarios al registrarse. Si la sincronización de grupo SSO está activada, este grupo sólo se establece si no se puede asignar ningún grupo desde el IdP." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Forzar MFA" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Los usuarios deben utilizar seguridad multifactor." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Comprobar complementos al iniciar" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Comprobar que todos los complementos están instalados en el arranque - habilitar en entornos de contenedores" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Revisar actualizaciones del plugin" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Habilitar comprobaciones periódicas para actualizaciones de plugins instalados" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Habilitar integración de URL" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Habilitar plugins para añadir rutas de URL" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Habilitar integración de navegación" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Habilitar plugins para integrar en la navegación" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Habilitar integración de la aplicación" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Habilitar plugins para añadir aplicaciones" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Habilitar integración de programación" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Habilitar plugins para ejecutar tareas programadas" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Habilitar integración de eventos" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Habilitar plugins para responder a eventos internos" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Habilitar integración de interfaz" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Habilitar complementos para integrar en la interfaz de usuario" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Excluir Ubicaciones Externas" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Periodo de inventario automático" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Mostrar nombres completos de los usuarios" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Mostrar nombres completos de usuarios en lugar de nombres de usuario" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Habilitar datos de estación de prueba" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Habilitar la recolección de datos de estaciones de prueba para resultados de prueba" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Tiene existencias" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Empresas" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Descripción de la empresa" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Descripción de la empresa" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Página web" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "URL del sitio web de la empresa" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Teléfono" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Teléfono de contacto" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Correo electrónico de contacto" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contacto" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Punto de contacto" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Enlace a información externa de la empresa" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "¿Esta empresa está activa?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "¿Es cliente?" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "¿Vendes artículos a esta empresa?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "¿Es proveedor?" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "¿Compras artículos de esta empresa?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "¿Es productor?" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "¿Esta empresa fabrica partes?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Moneda predeterminada utilizada para esta empresa" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Dirección" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Direcciones" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Seleccionar empresa" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Título de dirección" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Título que describe la entrada de dirección" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Dirección principal" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Establecer como dirección principal" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Línea 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Dirección línea 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Línea 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Dirección línea 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Código postal" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Ciudad/región" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Código postal de ciudad/región" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Estado/provincia" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Estado o provincia" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "País" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Dirección de país" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notas de envío de mensajería" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notas para el mensajero de envío" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Notas de envío internas" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notas de envío para uso interno" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Parte del fabricante" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Parte base" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Seleccionar parte" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Número de parte de fabricante" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL para el enlace de parte del fabricante externo" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Descripción de la parte del fabricante" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Las unidades de paquete deben ser compatibles con las unidades de partes de base" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Las unidades de paquete deben ser mayor que cero" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Proveedor" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Seleccionar parte del fabricante" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL del enlace de parte del proveedor externo" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "costo base" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Paquetes" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Embalaje de partes" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Cantidad de paquete" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Cantidad total suministrada en un solo paquete. Dejar vacío para artículos individuales." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "múltiple" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Pedido múltiple" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Cantidad disponible del proveedor" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilidad actualizada" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Fecha de última actualización de los datos de disponibilidad" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "Moneda predeterminada utilizada para este proveedor" msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "En Stock" @@ -4452,7 +4459,7 @@ msgstr "El campo no existe en el modelo destino" msgid "Selected field is read-only" msgstr "El campo seleccionado es de solo lectura" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Sesión de importación" @@ -4464,31 +4471,31 @@ msgstr "Campo" msgid "Column" msgstr "Columna" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Número de fila" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Datos de la fila original" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Errores" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Válido" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "Número de copias a imprimir para cada etiqueta" msgid "Connected" msgstr "Conectado" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Desconocido" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Referencia del pedido" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Destacado" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Tiene Código de Proyecto" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Creado por" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Creado antes de" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Creado después de" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Fecha objetivo antes de" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Fecha objetivo después de" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Tiene Precio" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Completado antes de" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Completado después de" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Orden" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Componente interno" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Orden pendiente" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Completados" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Tiene envío" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Orden de compra" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Orden de compra" msgid "Sales Order" msgstr "Orden de Venta" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Precio Total" msgid "Total price for this order" msgstr "Precio total para este pedido" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Moneda de pedido" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Moneda para este pedido (dejar en blanco para utilizar el valor predeterminado de la empresa)" @@ -4851,718 +4870,742 @@ msgstr "Moneda para este pedido (dejar en blanco para utilizar el valor predeter msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "El contacto no coincide con la empresa seleccionada" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Descripción del pedido (opcional)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Seleccione el código del proyecto para este pedido" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Enlace a Url externa" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Fecha esperada para la entrega del pedido. El pedido se retrasará después de esta fecha." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Fecha de emisión" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Fecha de expedición del pedido" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Usuario o grupo responsable de este pedido" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Punto de contacto para este pedido" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Dirección de la empresa para este pedido" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Referencia del pedido" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Estado" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Estado de la orden de compra" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Empresa de la cual se están encargando los artículos" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Referencia del proveedor" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Código de referencia de pedido del proveedor" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "recibido por" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "La fecha de pedido fue completada" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Destinación" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Destino para los artículos recibidos" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "El proveedor de la parte debe coincidir con el proveedor de PO" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "La partida no coincide con la orden de compra" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "La cantidad debe ser un número positivo" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Empresa a la que se venden los artículos" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Estado de la orden de venta" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Referencia del cliente " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Código de referencia de pedido del cliente" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Fecha de envío" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "La orden ya fue completada" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "La orden ya fue cancelada" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Sólo una orden abierta puede ser marcada como completa" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "El pedido no se puede completar porque hay envíos incompletos" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "El pedido no se puede completar ya que hay asignaciones incompletas" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "El pedido no se puede completar porque hay partidas incompletas" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Cantidad del artículo" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Referencia de partida" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Notas de partida" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Fecha objetivo para esta partida (dejar en blanco para usar la fecha de destino de la orden)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Descripción de partida (opcional)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Contexto adicional para esta línea" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Precio unitario" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "La parte del proveedor debe coincidir con el proveedor" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Parte del proveedor" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Recibido" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Precio de Compra" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Precio de compra unitario" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Sólo las partes vendibles pueden ser asignadas a un pedido de venta" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Precio de Venta" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Precio de venta unitario" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Cantidad enviada" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Fecha del envío" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Fecha de entrega" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Fecha de entrega del envío" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Revisado por" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Número de envío" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Número de Seguimiento" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Información de seguimiento del envío" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Número de factura" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Número de referencia para la factura asociada" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "El envío ya ha sido enviado" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "El envío no tiene artículos de stock asignados" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "El artículo de stock no ha sido asignado" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "No se puede asignar el artículo de stock a una línea con una parte diferente" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "No se puede asignar stock a una línea sin una parte" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La cantidad de asignación no puede exceder la cantidad de stock" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "La orden de venta no coincide con el envío" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "El envío no coincide con el pedido de venta" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Línea" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Referencia del envío del pedido de venta" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Ítem" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Seleccionar artículo de stock para asignar" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Especificar la cantidad de asignación de stock" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Referencia de la orden de devolución" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Empresa de la cual se están devolviendo los artículos" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Estado de la orden de devolución" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "El artículo de almacén debe ser especificado" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "La cantidad de retorno excede la cantidad de existencias" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "La cantidad de retorno debe ser mayor que cero" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "Cantidad inválida para el artículo de stock serializado" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Seleccionar el artículo a devolver del cliente" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Fecha de recepción" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Resultado" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Salida para esta partida" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Costo asociado con la devolución o reparación para esta partida" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID del Pedido" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID del pedido a duplicar" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Copiar líneas" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Copiar partida del pedido original" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Copiar líneas adicionales" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Copiar partidas extra del pedido original" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Copiar Parámetros" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Partidas" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplicar pedido" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Especificar opciones para duplicar este pedido" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "ID de pedido inválido" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcular precio de compra automáticamente con base en los datos del proveedor" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Introduzca el código de lote para los artículos de almacén entrantes" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "No se han encontrado coincidencias para los siguientes números de serie" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Los artículos sólo pueden ser recibidos contra pedidos en curso" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5598,146 +5641,146 @@ msgstr "Reembolso" msgid "Reject" msgstr "Rechazo" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Orden de compra atrasada" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "La orden de compra {po} está atrasada" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Orden de venta atrasada" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "La orden de venta {so} está atrasada" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Favoritos" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Profundidad" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtrar por profundidad de categoría" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Nivel superior" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtrar por categorías de nivel superior" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "En cascada" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Tiene resultados" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "Categoría de parte" msgid "Part Categories" msgstr "Categorías de parte" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Ubicación Predeterminada" @@ -5778,7 +5821,7 @@ msgstr "Palabras clave por defecto para partes en esta categoría" msgid "Icon" msgstr "Icono" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icono (opcional)" @@ -5799,7 +5842,7 @@ msgstr "Valor predeterminado" msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Partes" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Ya existe un artículo de almacén con este número de serie" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN duplicado no permitido en la configuración de partes" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "La revisión de parte duplicada ya existe." -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Parte con este nombre, IPN y revisión ya existe." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "¡No se pueden asignar partes a las categorías de partes estructurales!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Nombre de la parte" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Es plantilla" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "¿Es esta parte una parte de la plantilla?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Descripción de parte (opcional)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Palabras claves" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqueda" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Revisión de parte o número de versión" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Revisión" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Variante de" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "¿Dónde se almacena este artículo normalmente?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Expiración por defecto" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Stock mínimo" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Nivel mínimo de stock permitido" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Unidades de medida para esta parte" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "¿Se puede construir esta parte a partir de otras partes?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "¿Se puede utilizar esta parte para construir otras partes?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "¿Esta parte tiene seguimiento de objetos únicos?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "¿Se puede comprar esta parte a proveedores externos?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "¿Se puede vender esta parte a los clientes?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "¿Está activa esta parte?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Las partes bloqueadas no pueden ser editadas" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "¿Es ésta una parte virtual, como un producto de software o una licencia?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Suma de verificación de BOM" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Suma de verificación de BOM almacenada" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "BOM comprobado por" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Fecha BOM comprobada" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Creación de Usuario" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Fecha" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Las plantillas de prueba solo pueden ser creadas para partes de prueba" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Requerido" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "¿Esta prueba requiere un valor al agregar un resultado de la prueba?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "¿Esta prueba requiere un archivo adjunto al agregar un resultado de la prueba?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este artículo de BOM es consumible (no está rastreado en órdenes de construcción)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Validado" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este artículo BOM es heredado por BOMs para partes variantes" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Artículos de stock para partes variantes pueden ser usados para este artículo BOM" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sustituta no puede ser la misma que la parte principal" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Categoría principal de parte" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Subcategorías" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Moneda de compra de ítem de stock" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Copiar Parámetros" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "En construcción" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "El precio mínimo no debe ser mayor que el precio máximo" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "El precio máximo no debe ser inferior al precio mínimo" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluye artículos BOM que son heredados de partes con plantillas" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notificación por bajo stock" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "El stock disponible para {part.name} ha caído por debajo del nivel mínimo configurado" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "El complemento no está instalado" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Instalación del complemento no encontrada" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "Complemento" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "No se encontró autor" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "El complemento '{p}' no es compatible con la versión actual de InvenTree {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "El complemento requiere al menos la versión {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "El complemento requiere como máximo la versión {v}" @@ -7884,51 +7937,51 @@ msgstr "Instalación no confirmada" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Activar complemento" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Activar este complemento" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "Total" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Número de serie" @@ -8215,7 +8268,7 @@ msgstr "Artículo Stock Informe de prueba" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Elementos instalados" @@ -8248,184 +8301,196 @@ msgstr "Ningún resultado (requerido)" msgid "No result" msgstr "Sin resultados" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Ubicación principal" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtrar por ubicación principal" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Nombre de pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "El nombre de la pieza contiene (insensible a mayúsculas y minúsculas)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Nombre de la pieza (expresión regular)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "IPN de Pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "IPN de pieza contiene (insensible a mayúsculas y minúsculas)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "IPN de Pieza (expresión regular)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Existencias mínimas" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Existencias máximas" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Código de estado" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Ubicación externa" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Consumido por orden de construcción" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Instalado en otro artículo de existencias" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Árbol de piezas" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Actualizado antes de" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Actualizado después de" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Inventario antes de" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Inventario después de" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Desactualizado" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Cantidad requerida" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Debe suministrarse una parte válida" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Ubicación de Stock" @@ -8449,11 +8514,11 @@ msgstr "Ubicación de Stock" msgid "Stock Locations" msgstr "Ubicaciones de Stock" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Propietario" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Seleccionar Propietario" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Se debe especificar la pieza" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "La cantidad debe ser 1 para el artículo con un número de serie" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Número de serie no se puede establecer si la cantidad es mayor que 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "El objeto no puede pertenecer a sí mismo" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "El artículo debe tener una referencia de construcción si is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "La referencia de la construcción no apunta al mismo objeto de parte" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Artículo de stock padre" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Parte base" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Seleccione una parte del proveedor correspondiente para este artículo de stock" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "¿Dónde se encuentra este artículo de stock?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Empaquetar este artículo de stock se almacena en" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Instalado en" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "¿Está este artículo instalado en otro artículo?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Número de serie para este artículo" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Código de lote para este artículo de stock" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Cantidad de Stock" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Build de origen" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Build para este item de stock" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Consumido por" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Orden de compra de origen" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Orden de compra para este artículo de stock" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Orden de venta de destino" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Fecha de caducidad del artículo de stock. El stock se considerará caducado después de esta fecha" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Eliminar al agotar" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Eliminar este artículo de stock cuando se agoten las existencias" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Precio de compra único en el momento de la compra" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Convertido a parte" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "La parte no está establecida como rastreable" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Cantidad debe ser un entero" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Los números de serie deben ser proporcionados como una lista" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "La cantidad no coincide con los números de serie" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Artículo de stock ha sido asignado a un pedido de venta" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Artículo de stock está instalado en otro artículo" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Artículo de stock contiene otros artículos" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Artículo de stock ha sido asignado a un cliente" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "El artículo de stock está en producción" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Los artículos de stock deben referirse a la misma parte" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Los artículos de stock deben referirse a la misma parte del proveedor" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Los códigos de estado del stock deben coincidir" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stock no se puede mover porque no está en stock" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Notas de entrada" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Debe proporcionarse un valor para esta prueba" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "El archivo adjunto debe ser subido para esta prueba" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Resultado de la prueba" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Valor de salida de prueba" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Adjunto de resultados de prueba" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Notas de prueba" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "Finalizó" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Elemento padre" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Introduzca números de serie para nuevos artículos" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Número de pieza del proveedor" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Elementos secundarios" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Introduzca el número de artículos de stock para serializar" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Ubicación de stock de destino" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Los números de serie no se pueden asignar a esta parte" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Números de serie ya existen" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Añadir nota de transacción (opcional)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Sub-ubicación" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "La parte debe ser vendible" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "El artículo está asignado a una orden de venta" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "El artículo está asignado a una orden de creación" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Cliente para asignar artículos de stock" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "La empresa seleccionada no es un cliente" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Notas de asignación de stock" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Debe proporcionarse una lista de artículos de stock" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Notas de fusión de stock" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Permitir proveedores no coincidentes" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permitir fusionar artículos de stock con diferentes partes de proveedor" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Permitir estado no coincidente" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Permitir fusionar artículos de stock con diferentes códigos de estado" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Debe proporcionar al menos dos artículos de stock" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Sin cambios" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Valor de clave primaria de Stock" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "No hay existencias del artículo" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Notas de transacción de stock" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "Apellido del usuario" msgid "Email address of the user" msgstr "Dirección de correo del usuario" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personal" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Tiene este usuario permisos de personal" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Superusuario" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Es este usuario un superusuario" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Esta cuenta de usuario está activa" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Su cuenta ha sido creada." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Por favor, utilice la función de restablecer la contraseña para iniciar sesión" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Bienvenido a InvenTree" diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po index 2bbbdcea24..982486746a 100644 --- a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Language: et_EE\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Teil ei ole selle lehe vaatamiseks luba" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -112,13 +104,13 @@ msgstr "Pane kuupäev" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Märkmed" @@ -131,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Ühenduse viga" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Esines tõrge" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +215,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-post" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "" msgid "Invalid choice" msgstr "Vigane valik" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nimi" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Kirjeldus" msgid "Description (optional)" msgstr "Kirjeldus (valikuline)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Tee" @@ -313,75 +321,66 @@ msgstr "" msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serveri viga" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Pilt" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuuta" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Hiina (lihtsustatud)" msgid "Chinese (Traditional)" msgstr "Hiina (traditsiooniline)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Määratud" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Valikuline" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Jälgitud" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Saadaval" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Asukoht" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "Tootekood" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Koostamise olek" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Loomise kuupäev" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Kogus" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Osa nimi" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Tühista kõik laoseisu eraldised mahakantud väljundite jaoks" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Valikained" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Jälgitav" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Saadaval laos" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "Katkestatud" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Valmis" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "On link" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "On fail" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "Pluginat pole" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Uuendatud" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Seade võti" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Seade väärtus" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "ID" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Pealkiri" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Avaldatud" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Autor" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Kokkuvõte" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Loetud" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Pildifail" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Ühiku nimi" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Sümbol" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definitsioon" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Ühiku definitsioon" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Manus" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Puuduv fail" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Puuduv väline link" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Vali fail, mida lisada" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Kommentaar" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Faili suurus" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Silt" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Loodud" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Mall" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Andmed" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Märkus" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Vöötkoodi andmed" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Vastus" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Tulemus" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Võti" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Ülesande nimi" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Funktsioon" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Funktsiooni nimi" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumendid" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Ülesande argumendid" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Failinimi" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Mudeli liik" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Grupp puudub" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Taaskäivitamine on vajalik" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Ettevõtte nimi" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "päeva" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Automaatne varundus" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Vöötkoodi tugi" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Ostetav" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtuaalne" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Lehe suurus" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Luba liidese integreerimine" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Luba pluginatel integreeruda kasutajaliidesesse" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Tootja" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Ettevõte" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Laos" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Ettevõtted" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Ettevõtte kirjeldus" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Ettevõtte kirjeldus" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Veebileht" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Ettevõtte veebilehe aadress" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Telefoninumber" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kontakttelefoni number" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontakt e-postiaadress" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Aadress" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Aadressid" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Vali ettevõte" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Peamine aadress" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Määra peamine aadress" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Rida 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Aadressi rida 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Rida 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Aadressi rida 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Postiindeks" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Linn/Piirkond" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Riik" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Tarnija" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Vali tarnija" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "Väli" msgid "Column" msgstr "Veerg" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Staatus" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Müügihind" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Saadetud" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Saadetis" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Rida" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "Tellimuse ID" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "Kopeeritava tellimuse ID" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Kopeeri read" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Kopeeri reaüksused algsest tellimusest" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Kopeeri lisareaüksused algsest tellimusest" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopeeri parameetrid" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Määrake selle tellimuse dubleerimise valikud" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Vale tellimuse ID" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "Tootekood" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Vöötkood" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Skännitud ribakood" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Saadetised" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Järgmised seerianumbrid ei ole saadaval" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "Tagasimakse" msgid "Reject" msgstr "Keeldu" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Sügavus" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "Osa kategooria" msgid "Part Categories" msgstr "Osa kategooriad" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "Ikoon" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikoon (valikuline)" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Osad" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Osa nimi" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "On mall" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Märksõnad" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Osa kategooria" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimaalne laoseis" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Testimalle saab luua ainult testitavate osade jaoks" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Originaalosa" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopeeri pilt" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Kopeeri parameetrid" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategooria nimi" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Ehitamine" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Tarnija info" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minimaalne hind" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Maksimaalne hind" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Uuenda" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "Paki plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Autorit ei leitud" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Seerianumber" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Testitulemused" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Tarnija osa number" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po index 35bf387287..25ffa62744 100644 --- a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "Address e API peida nashod" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "لیست اقلام یا فیلترها باید برای عملیات انبوه ارائه شود" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "موارد باید به صورت لیست ارائه شود" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "لیست موارد نامعتبر ارائه شده است" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "فیلترها باید به صورت دستوری ارائه شوند" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "فیلترهای نامعتبر ارائه شده است" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "تمامی فیلترها باید منحصراً با مقدار true مورد استفاده قرار گیرند" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "هیچ موردی با معیارهای ارائه شده مطابقت ندارد" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "کاربر سطح دسترسی نمایش این مدل را ندارد" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "نمی‌توان {original} را به {unit} تبدیل کرد" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "مقدار ارائه شده نامعتبر است" @@ -112,13 +104,13 @@ msgstr "تاریخ را وارد کنید" msgid "Invalid decimal value" msgstr "مقدار اعشاری نامعتبر است" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "یادداشت" @@ -131,75 +123,91 @@ msgstr "مقدار '{name}' در قالب الگو ظاهر قرار نمی گی msgid "Provided value does not match required pattern: " msgstr "مقدار ارائه شده با الگوی مورد نیاز مطابقت ندارد: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "نمی توان بیش از 1000 مورد را به طور همزمان سریال کرد" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "رشته شماره سریال خالی" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "سریال تکراری" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "گروه نامعتبر: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "محدوده گروه {group} از مقدار مجاز بیشتر است ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "هیچ شماره سریالی پیدا نشد" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "برچسب های HTML را از این مقدار حذف کنید" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "داده ها حاوی محتوای علامت گذاری ممنوع است" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "خطا در اتصال" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "سرور با کد وضعیت نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "یک استثنا رخ داده است" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "سرور با مقدار طول محتوا نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "اندازه عکس بسیار بزرگ است" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "حجم دانلود تصویر از حداکثر اندازه بیشتر شده است" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "سرور ریموت پاسخ خالی را برگرداند" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "URL ارائه شده یک فایل تصویری معتبر نیست" @@ -207,11 +215,11 @@ msgstr "URL ارائه شده یک فایل تصویری معتبر نیست" msgid "Log in to the app" msgstr "وارد برنامه شوید" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "ایمیل" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "قبل از انجام هر کار دیگری باید احراز هویت دو مرحله ای را فعال کنید." @@ -259,18 +267,18 @@ msgstr "شماره مرجع خیلی بزرگ است" msgid "Invalid choice" msgstr "انتخاب نامعتبر" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "نام" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "توضیحات" msgid "Description (optional)" msgstr "توضیحات (اختیاری)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "مسیر" @@ -313,75 +321,66 @@ msgstr "هش منحصر به فرد داده های بارکد" msgid "Existing barcode found" msgstr "بارکد موجود پیدا شد" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "شکست کار" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "پس از {n} تلاش، کار پس زمینه '{f}' ناموفق بود" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "خطای سرور" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "یک خطا توسط سرور ثبت شده است." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "باید یک عدد معتبر باشد" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "ارز" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "ارز را از گزینه های موجود انتخاب کنید" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "مقدار نامعتبر" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "تصویر ریموت" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "آدرس فایل تصویری از راه دور" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "دانلود تصاویر از URL ریموت فعال نیست" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "دانلود تصویر از URL ریموت انجام نشد" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "چینی (ساده شده)" msgid "Chinese (Traditional)" msgstr "چینی (سنتی)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "واحد فیزیکی نامعتبر" msgid "Not a valid currency code" msgstr "کد ارز معتبر" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "وضعیت سفارش" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "قطعه" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "دسته" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "واگذار شده به من" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "واگذار شده به" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "ایجاد شده قبل از" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "ایجاد شده بعد از" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "دارای تاریخ شروع" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "تاریخ شروع قبل از" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "تاریخ شروع بعد از" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "دارای تاریخ موعد" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "تاریخ موعد قبل از" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "تاریخ موعد بعد از" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "تکمیل شده قبل از" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "تکمیل شده بعد از" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "مصرفی" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "اختیاری" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "مونتاژ" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "سفارش معوق" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "اختصاص داده شده" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "در دسترس" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "سفارش ساخت" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "مکان" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "سفارش‌های ساخت" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "مرجع سفارش فروش" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "منبع محل" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "مقصد" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "تاریخ تکمیل" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "تکمیل شده توسط" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "صادر شده توسط" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "کاربری که این سفارش ساخت را صادر کرده است" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "پیوند خارجی" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po index c17488875c..0c519e2c5d 100644 --- a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API-rajapintaa ei löydy" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Käyttäjän oikeudet eivät riitä kohteen tarkastelemiseen" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Annettu määrä on virheellinen" @@ -112,13 +104,13 @@ msgstr "Anna päivämäärä" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Merkinnät" @@ -131,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Tyhjä sarjanumero" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Duplikaatti sarjanumero" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Sarjanumeroita ei löytynyt" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Yhteysvirhe" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Palvelin vastasi virheellisellä tilakoodilla" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Kuva on liian iso" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Kuvan lataus ylitti enimmäiskoon" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Etäpalvelin palautti tyhjän vastauksen" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Annettu URL ei ole kelvollinen kuvatiedosto" @@ -207,11 +215,11 @@ msgstr "Annettu URL ei ole kelvollinen kuvatiedosto" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Sähköposti" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "Viitenumero on liian suuri" msgid "Invalid choice" msgstr "Virheellinen valinta" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nimi" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Kuvaus" msgid "Description (optional)" msgstr "Kuvaus (valinnainen)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Polku" @@ -313,75 +321,66 @@ msgstr "" msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Palvelinvirhe" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Kuva" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Täytyy olla kelvollinen luku" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuutta" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Valitse valuutta käytettävissä olevista vaihtoehdoista" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Virheellinen arvo" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "Kuvatiedoston URL" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Kuvien lataaminen ei ole käytössä" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategoria" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Saatavilla" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Sijainti" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Ulkoinen linkki" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Linkki ulkoiseen URLiin" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Määrä" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Varastotuote" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Sarjanumerot" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Ei sallittu" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Seurattavissa" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "Peruttu" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Valmis" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Päivitetty" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Viimeisimmän päivityksen aikaleima" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Käyttäjä" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Hinta" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktiivinen" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Salaisuus" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Isäntä" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Otsikko" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Linkki" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Julkaistu" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Julkaisija" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Yhteenveto" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Kuvatiedosto" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Liite" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Puuttuva tiedosto" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Puuttuva ulkoinen linkki" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Valitse liitettävä tiedosto" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Kommentti" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Arvo" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Käytössä" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Muistiinpano" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Avain" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Tiedostonimi" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Ei ryhmää" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Uudelleenkäynnistys vaaditaan" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Yrityksen nimi" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Yrityksen sisäinen nimi" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Oletusvaluutta" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "päivää" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Automaattinen varmuuskopionti" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Ota käyttöön tietokannan ja mediatiedostojen automaattinen varmuuskopiointi" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Automaattisen varmuuskopioinnin aikaväli" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Viivakoodituki" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponentti" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Ostettavissa" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Sisäiset hinnat" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Sisäisen hinnan ohitus" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Sivun koko" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Salli salasananpalautus" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Salli rekisteröinti" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Salli SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Salli SSO kirjautumissivuilla" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Salli SSO rekisteröinti" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Sähköposti vaaditaan" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Sähköpostiosoite kahdesti" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Salasana kahdesti" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Sallitut verkkotunnukset" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Pakota MFA" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Valmistaja" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Yritys" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Yritykset" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Yrityksen kuvaus" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Sivusto" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Yrityksen sivuston URL" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Puhelinnumero" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakti" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Osoite" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Valitse valmistaja" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Valmistajan osanumero" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Toimittaja" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Valitse toimittaja" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Toimittajan varastonimike" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Valitse valmistajan osa" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Valmis" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Hinta yhteensä" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Tilauksen valuutta" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Tilauksen viite" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Tila" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Asiakas" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Asiakkaan viite " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Vastaanotettu" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Lähetetty" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Seurantakoodi" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Laskunumero" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Viivakoodi" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "Kuvake" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Kuvake (valinnainen)" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Avainsanat" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Päivämäärä" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Valmistajan osanumero" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Sarjanumero" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po index 8c7f10b22a..f0eb663b4c 100644 --- a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "Point de terminaison de l'API introuvable" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Liste des éléments ou des filtres à fournir pour les opérations en vrac" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Les éléments doivent être fournis sous forme de liste" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Liste d'éléments non valide fournie" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Les filtres doivent être fournis sous forme de dictionnaire" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Filtres fournis invalides" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Tous les filtres ne doivent être utilisés qu'avec \"true\"" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Aucun élément ne correspond aux critères fournis" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Aucune donnée disponible" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Ce champ doit être unique" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "L'utilisateur n'a pas la permission de voir ce modèle" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Impossible de convertir {original} en {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" @@ -112,13 +104,13 @@ msgstr "Entrer la date" msgid "Invalid decimal value" msgstr "Valeur décimale invalide" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Notes" @@ -131,75 +123,91 @@ msgstr "La valeur '{name}' n'apparaît pas dans le format du modèle" msgid "Provided value does not match required pattern: " msgstr "La valeur fournie ne correspond pas au modèle requis : " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Impossible de sérialiser plus de 1000 éléments à la fois" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Chaîne de numéro de série vide" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Numéro de série en doublon" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Groupe invalide : {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "La plage de groupe {group} dépasse la quantité autorisée ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Aucun numéro de série trouvé" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Le nombre de numéros de série uniques ({n}) doit correspondre à la quantité ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Retirer les balises HTML de cette valeur" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Les données contiennent du contenu markdown interdit" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Erreur de connexion" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Le serveur a répondu avec un code de statut invalide" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Une erreur est survenue" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Le serveur a répondu avec une valeur de longueur de contenu invalide" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Image trop volumineuse" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "La taille de l'image dépasse la taille maximale autorisée" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Le serveur distant a renvoyé une réponse vide" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "L'URL fournie n'est pas un fichier image valide" @@ -207,11 +215,11 @@ msgstr "L'URL fournie n'est pas un fichier image valide" msgid "Log in to the app" msgstr "Se connecter à l'application" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Vous devez activer l'authentification à deux facteurs avant toute autre chose." @@ -259,18 +267,18 @@ msgstr "Le numéro de référence est trop grand" msgid "Invalid choice" msgstr "Choix invalide" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nom" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Description" msgid "Description (optional)" msgstr "Description (facultative)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Chemin d'accès" @@ -313,75 +321,66 @@ msgstr "Hachage unique des données du code-barres" msgid "Existing barcode found" msgstr "Code-barres existant trouvé" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Échec de la tâche" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "La tâche de travail en arrière-plan '{f}' a échoué après {n} tentatives" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Erreur serveur" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Une erreur a été loguée par le serveur." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Image" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Doit être un nombre valide" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Devise" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Sélectionnez la devise à partir des options disponibles" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "Ce champ ne peut pas être vide." -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Valeur non valide" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Images distantes" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL du fichier image distant" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 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/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Échec du téléchargement de l'image à partir de l'URL distant" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "Format du type de contenu invalide" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "Type de contenu introuvable" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "Le type de contenu ne correspond pas à la classe de mixin requise" @@ -537,11 +536,11 @@ msgstr "Chinois (Simplifié)" msgid "Chinese (Traditional)" msgstr "Chinois (Traditionnel)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Mise à jour disponible" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "Une mise à jour pour InvenTree est disponible" @@ -553,30 +552,30 @@ msgstr "Unité invalide" msgid "Not a valid currency code" msgstr "Code de devise invalide" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Statut de la commande" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Fabrication parente" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Inclure les variantes" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Inclure les variantes" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Inclure les variantes" msgid "Part" msgstr "Pièce" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Catégorie" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Version Précédente" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Attribué à moi" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Attribué à" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Créé avant" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Créé après" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "A une date de début" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Date de début avant" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Date de début après" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "A une date butoir" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Date cible avant" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Date cible après" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Terminé avant" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Terminé après" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Date min" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Date maximale" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Exclure l'arbre" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "La construction doit être annulée avant de pouvoir être supprimée" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Consommable" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Facultatif" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Assemblage" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Suivi" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Testable" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Commande en cours" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Allouée" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Consommé" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "En Commande" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordre de Fabrication" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Emplacement" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Sortie" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filtrer par l'identifiant (ID) des articles du stock de sortie. Utilisez 'null' pour trouver les éléments de fabrication non installés." @@ -748,41 +751,41 @@ msgstr "Filtrer par l'identifiant (ID) des articles du stock de sortie. Utilisez msgid "Build Orders" msgstr "Ordres de Fabrication" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "La liste des composants de l'assemblage n'a pas été validée" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Impossible de créer un ordre de fabrication pour une pièce inactive" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Impossible de créer un ordre de fabrication pour une pièce non verrouillée" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Les ordres de fabrication ne peuvent être exécutées qu'en externe pour les pièces achetables" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Un utilisateur ou un groupe responsable doit être spécifié" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "La pièce de commande de construction ne peut pas être changée" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "La date cible doit être postérieure à la date de début" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Référence de l' Ordre de Fabrication" msgid "Reference" msgstr "Référence" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Brève description de la fabrication (optionnel)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "Commande de fabrication associée à cette fabrication" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Sélectionnez la pièce à construire" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Bon de commande de référence" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "Commande de vente à laquelle cette fabrication est allouée" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Emplacement d'origine" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Sélectionner l'emplacement à partir duquel le stock doit être pris pour cette construction (laisser vide pour prendre à partir de n'importe quel emplacement de stock)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Fabrication externe" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Cet ordre de fabrication est exécuté en externe" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Emplacement cible" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Sélectionnez l'emplacement où les éléments complétés seront stockés" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Quantité a fabriquer" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Nombre de stock items à construire" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Articles terminés" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Nombre d'articles de stock qui ont été terminés" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "État de la construction" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Code de statut de construction" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Code de lot" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Code de lot pour ce build output" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Date de création" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Début de la fabrication" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Date de début prévue pour cet ordre de construction" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Date d'achèvement cible" -#: build/models.py:376 +#: build/models.py:379 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:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Date d'achèvement" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "achevé par" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Émis par" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Utilisateur ayant émis cette commande de construction" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Utilisateur ou groupe responsable de cet ordre de construction" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Lien Externe" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Lien vers une url externe" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Priorité de fabrication" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Priorité de cet ordre de fabrication" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Code du projet" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Code de projet pour cet ordre de construction" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Impossible de terminer l'ordre de fabrication avec des constructions enfant ouvertes" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Impossible de terminer l'ordre de fabrication avec des sorties incomplètes" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Échec du déchargement de la tâche pour terminer les allocations de construction" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "La commande de construction {build} a été effectuée" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Une commande de construction a été effectuée" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Les numéros de série doivent être fournis pour les pièces traçables" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Pas d'ordre de production défini" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "L'ordre de production a déjà été réalisé" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "L'ordre de production de correspond pas à l'ordre de commande" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantité ne peut pas être supérieure à la quantité de sortie" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "Les sorties de fabrication n'ont pas passé tous les tests requis" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La sortie de compilation {serial} n'a pas réussi tous les tests requis" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "Les articles en stock alloués sont toujours en production" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Impossible de compléter partiellement une sortie de construction avec les éléments alloués" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Poste de l'ordre de construction" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Création de l'objet" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Création de l'objet" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Quantité" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Quantité requise pour la commande de construction" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Quantité de stock consommé" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "L'élément de construction doit spécifier une sortie de construction, la pièce maîtresse étant marquée comme objet traçable" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "L'article de stock sélectionné ne correspond pas à la ligne BOM" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "La quantité doit être de 1 pour stock sérialisé" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantité allouée ({q}) ne doit pas excéder la quantité disponible ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "L'article de stock est suralloué" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Article en stock" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Stock d'origine de l'article" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Quantité de stock à allouer à la construction" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Installer dans" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Stock de destination de l'article" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Niveau de construction" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nom de l'article" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Sortie d'assemblage" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "L'ordre de production ne correspond pas à l'ordre parent" -#: build/serializers.py:225 +#: build/serializers.py:223 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:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Cet ordre de production a déjà été produit" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Cet ordre de production n'est pas complètement attribué" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Quantité entière requise pour les pièces à suivre" -#: build/serializers.py:339 +#: build/serializers.py:337 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:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Numéros de série" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Entrer les numéros de séries pour la fabrication" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Emplacement de stock pour la sortie de la fabrication" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Allouer automatiquement les numéros de série" -#: build/serializers.py:380 +#: build/serializers.py:378 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:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Les numéros de série suivants existent déjà, ou sont invalides" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Une liste d'ordre de production doit être fourni" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Emplacement du stock pour les sorties épuisées" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Ignorer les allocations" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Abandonner les allocations de stock pour les sorties abandonnées" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Motif de l'élimination des produits de construction(s)" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Emplacement des ordres de production achevés" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Accepter l'allocation incomplète" -#: build/serializers.py:567 +#: build/serializers.py:565 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:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consommation du stock alloué" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consommer tout stock qui a déjà été alloué à cette construction" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Retirer les sorties incomplètes" -#: build/serializers.py:700 +#: build/serializers.py:698 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:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Non permis" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Accepter comme consommé par cet ordre de construction" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Désaffecter avant de terminer cette commande de fabrication" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Stock suralloué" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Comment voulez-vous gérer les articles en stock supplémentaires assignés à l'ordre de construction" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Certains articles de stock ont été suralloués" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Accepter les non-alloués" -#: build/serializers.py:777 +#: build/serializers.py:775 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:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Le stock requis n'a pas encore été totalement alloué" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" -#: build/serializers.py:795 +#: build/serializers.py:793 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:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "La quantité nécessaire n'a pas encore été complétée" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "L'ordre de construction a des ordres de construction enfants ouverts" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "L'ordre de construction doit être en état de production" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "L'ordre de production a des sorties incomplètes" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Chaîne d'assemblage" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Sortie d'assemblage" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "La sortie de la construction doit pointer vers la même construction" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Élément de la ligne de construction" -#: build/serializers.py:928 +#: build/serializers.py:926 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:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" -#: build/serializers.py:993 +#: build/serializers.py:991 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 suivies" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La sortie de la construction ne peut pas être spécifiée pour l'allocation des pièces non suivies" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Les articles d'allocation doivent être fournis" -#: build/serializers.py:1089 +#: build/serializers.py:1087 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 (laissez vide pour les prendre à partir de n'importe quel emplacement)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Emplacements exclus" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Exclure les articles de stock de cet emplacement sélectionné" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Stock interchangeable" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Les articles de stock à plusieurs emplacements peuvent être utilisés de manière interchangeable" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Stock de substitution" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Autoriser l'allocation de pièces de remplacement" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Objets Optionnels" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Affecter des éléments de nomenclature facultatifs à l'ordre de fabrication" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Échec du démarrage de la tâche d'auto-allocation" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Référence de la nomenclature" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID de la pièce de la nomenclature" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nomenclature Nom de la pièce" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Construire" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Pièce fournisseur" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Quantité allouée" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Référence de construction" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Nom de la catégorie de pièces" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Traçable" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Reçu de quelqu'un" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Autoriser les variantes" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "En Production" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Planifié pour fabrication" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Stock externe" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Stock disponible" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Stock de substitution disponible" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Stock de variantes disponibles" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantité consommée dépasse la quantité allouée" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Note optionnelle pour la consommation du stock" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "L'article fabriqué doit pointer vers l'ordre de fabrication correct" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Dupliquer l'allocation de l'article de fabrication" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "L'article fabriqué doit pointer vers l'ordre de fabrication correct" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Dupliquer l'allocation de ligne de fabrication" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Au moins un élément ou une ligne doit être fourni" @@ -1495,43 +1494,43 @@ msgstr "En pause" msgid "Cancelled" msgstr "Annulé" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Terminé" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Stock requis pour la commande de construction" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "L'ordre de fabrication {build} nécessite du stock additionnel" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Ordre de commande en retard" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "L'ordre de commande {bo} est maintenant en retard" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "C'est un lien" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "C'est un fichier" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "L'utilisateur n'a pas les permissions de supprimer cette pièce jointe" @@ -1555,794 +1554,794 @@ msgstr "Pas de plugin" msgid "Project Code Label" msgstr "Code du projet Étiquette" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Mise à jour" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Date de la dernière mise à jour" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "Mis à jour par" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "Utilisateur qui a mis à jour cet objet en dernier" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Code projet unique" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Description du projet" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Utilisateur ou groupe responsable de ce projet" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Paramétrés des touches" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Valeur du paramètre" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "La valeur choisie n'est pas une option valide" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "La valeur doit être une valeur booléenne" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "La valeur doit être un nombre entier" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Valeur doit être un nombre valide" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "La valeur ne passe pas les contrôles de validation" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "La chaîne de caractères constituant la clé doit être unique" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Utilisateur" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Quantité de rupture de prix" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Prix" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Prix unitaire à la quantité spécifiée" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Point final" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Point de terminaison auquel ce webhook est reçu" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Nom de ce webhook" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Actif" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Ce webhook (lien de rappel HTTP) est-il actif" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Jeton" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Jeton d'accès" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Confidentiel" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Secret partagé pour HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "ID message" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Identifiant unique pour ce message" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Hôte" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Hôte à partir duquel ce message a été reçu" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Entête" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "En-tête de ce message" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Corps" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Corps de ce message" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Endpoint à partir duquel ce message a été reçu" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Travaillé sur" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Le travail sur ce message est-il terminé ?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Id" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Titre" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Lien" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Publié" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Auteur" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Résumé" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Lu" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Cette nouvelle a-t-elle été lue ?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Fichier image" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "Type de modèle cible pour cette image" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "ID du modèle cible pour cette image" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Unité personnalisée" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Le symbole de l'unité doit être unique" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Le nom de l'unité doit être un identifiant valide" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Nom de l'unité" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Symbole" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Symbole d'unité facultatif" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Définition" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Définition de l'unité" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Pièce jointe" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Fichier manquant" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Lien externe manquant" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Type de modèle" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "Type de modèle cible pour l'image" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Sélectionnez un fichier à joindre" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Commentaire" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Commentaire sur la pièce jointe" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Date de téléchargement" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Date de téléchargement du fichier" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Taille du fichier" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Taille du fichier en octets" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Type de modèle non valide spécifié pour la pièce jointe" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "État personnalisé" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "États membres de l'Union européenne" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Ensemble d'états de référence" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Ensemble d'états étendu à cet état personnalisé" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Clé logique" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "Clé logique de l'état qui est égale à cet état personnalisé dans la logique métier" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valeur" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "Valeur numérique qui sera enregistrée dans la base de données des modèles" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Nom de l'Etat" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Étiquette" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Etiquette qui sera affichée dans le frontend" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Couleur" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Couleur qui sera affichée dans le frontend" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Modèle" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "Modèle cet état est associé à" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Le modèle doit être sélectionné" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "La clé doit être sélectionnée" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "La clé logique doit être sélectionnée" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "La clé doit être différente de la clé logique" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Une classe de statut de référence valide doit être fournie" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "La clé doit être différente des clés logiques de l'état de référence" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "La clé logique doit se trouver dans les clés logiques de l'état de référence" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "Le nom doit être différent des noms des statuts de référence" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Liste de sélection" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Listes de sélection" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Nom de la liste de sélection" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Description de la liste de sélection" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Verrouillé" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Cette liste de sélection est-elle verrouillée ?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Cette liste de sélection peut-elle être utilisée ?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Plug-in source" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Plugin qui fournit la liste de sélection" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Chaîne source" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Chaîne facultative identifiant la source utilisée pour cette liste" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Entrée par défaut" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Entrée par défaut pour cette liste de sélection" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Créé le" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Date et heure de création de la liste de sélection" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Dernière mise à jour" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Date et heure de la dernière mise à jour de la liste de sélection" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Entrée de la liste de sélection" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Entrées de la liste de sélection" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Liste de sélection à laquelle appartient cette entrée" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Valeur de l'entrée de la liste de sélection" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Étiquette pour l'entrée de la liste de sélection" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Description de l'entrée de la liste de sélection" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "Cette entrée de la liste de sélection est-elle active ?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Modèle de paramètre" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "Modèle de paramètre" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Les paramètres des cases à cocher ne peuvent pas avoir d'unités" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Les paramètres des cases à cocher ne peuvent pas comporter de choix" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Les choix doivent être uniques" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Le nom du modèle de paramètre doit être unique" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "Type de modèle cible pour ce modèle de paramètre" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Nom du paramètre" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Unités" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Unités physiques pour ce paramètre" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Description des paramètres" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Case à cocher" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Ce paramètre est-il une case à cocher ?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Choix" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Choix valables pour ce paramètre (séparés par des virgules)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "Liste de sélection pour ce paramètre" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Activé" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "Ce modèle de paramètre est-il activé ?" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "Paramètre" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "Paramètres" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Choix incorrect pour la valeur du paramètre" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "Type de modèle non valide pour la pièce jointe" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "Identifiant du Modèle (ID)" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "ID du modèle cible pour ce paramètre" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Modèle" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "Modèle de paramètre" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Données" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Valeur du paramètre" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Note" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Champ de notes facultatif" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Analyse du code-barres" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Données du code-barres" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Utilisateur qui a scanné le code-barres" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Horodatage" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Date et heure du scan de code-barres" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "Point d'accès à l'URL qui a traité le code-barres" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Contexte" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Données contextuelles pour la lecture du code-barres" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Réponse" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Données de réponse provenant de la lecture du code-barres" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Résultat" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "La lecture du code-barres a-t-elle réussi ?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "Une erreur s'est produite" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8 : La suppression du journal d'e-mail est protégée. Définissez INVENTREE_PROTECT_EMAIL_LOG à False pour permettre la suppression." -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "Message email" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "Messages email" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "Annoncé" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "Envoyé" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "Échec" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Livré" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Confirmé" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "Entrant" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "Sortant" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Sans réponse" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "Suivi de livraison" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "Suivi de la lecture" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "Suivi du clic" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "ID Global" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identifiant pour ce message (peut être fourni par un système externe)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "ID du sujet de discussion" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identifiant pour ce fil de message (peut être fourni par un système externe)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "Fil de discussion" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "Fil lié à ce message" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "Priorité" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "Fil d'Email" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "Fils d'Emails" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clé" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "Clé unique pour ce fil (utilisée pour identifier le fil)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "Identifiant unique pour ce fil" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "Démarré en interne" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "Est-ce que ce fil a été démarré en interne ?" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "Date et heure de création du fil" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "Date et heure de dernière mise à jour du fil" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} annulé" msgid "A order that is assigned to you was canceled" msgstr "Une commande qui vous est assignée a été annulée" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Articles reçus" @@ -2392,1235 +2391,1243 @@ msgstr "Indique si le paramètre est écrasé par une variable d'environnement" msgid "Override" msgstr "Écraser" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "En cours d'exécution" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Tâches en attente" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tâches planifiées" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tâches échouées" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID de la tâche" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ID unique de la tâche" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Verrouillé" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Heure verrouillé" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Nom de la tâche" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Fonction" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Nom de la fonction" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Arguments" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Arguments tâche" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Mots-clés Arguments" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Mots-clés arguments tâche" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Nom du fichier" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Type de modèle" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "L'utilisateur n'a pas le droit de créer ou de modifier des pièces jointes pour ce modèle" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "L'utilisateur n'a pas le droit de créer ou de modifier les paramètres de ce modèle." -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "La liste de sélection est verrouillée" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Pas de groupe" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "L'URL du site est verrouillée par configuration" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Redémarrage nécessaire" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Un paramètre a été modifié, ce qui nécessite un redémarrage du serveur" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migration en attente" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Nombre de migrations de base de données en attente" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Codes warning actifs" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Un dictionnaire de codes d'avertissement actifs" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID de l'instance" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Identifiant unique pour cette instance InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Annoncer l'ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Annoncer l'ID d'instance du serveur dans l'info sur l'état du serveur (non authentifié)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nom de l'instance du serveur" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Chaîne de caractères descriptive pour l'instance serveur" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Utiliser le nom de l'instance" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Utiliser le nom de l’instance dans la barre de titre" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Limiter l'affichage de `about`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Afficher la modale `about` uniquement aux super-utilisateurs" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nom de la société" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Nom de société interne" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "URL de base" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "URL de base pour l'instance serveur" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Devise par défaut" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Sélectionnez la devise de base pour les calculs de prix" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Devises supportées" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Liste des codes de devises supportés" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Intervalle de mise à jour des devises" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Fréquence de mise à jour des taux de change (définir à zéro pour désactiver)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "jours" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Plugin de mise à jour de devise" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Plugin de mise à jour des devises à utiliser" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Télécharger depuis l'URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Autoriser le téléchargement d'images distantes et de fichiers à partir d'URLs externes" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Limite du volume de téléchargement" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Taille maximale autorisée pour le téléchargement de l'image distante" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "Agent utilisateur utilisé pour télécharger depuis l'URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permettre de remplacer l'agent utilisateur utilisé pour télécharger des images et des fichiers à partir d'URL externe (laisser vide pour la valeur par défaut)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Validation stricte d'URL" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Spécification du schéma nécessaire lors de la validation des URL" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Intervalle de vérification des mises à jour" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "À quelle fréquence vérifier les mises à jour (définir à zéro pour désactiver)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Backup automatique" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Activer le backup automatique de la base de données et des fichiers médias" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Intervalle de sauvegarde automatique" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Spécifiez le nombre de jours entre les sauvegardes automatique" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Intervalle de suppression des tâches" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Les résultats de la tâche en arrière-plan seront supprimés après le nombre de jours spécifié" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Intervalle de suppression du journal d'erreur" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Les logs d'erreur seront supprimés après le nombre de jours spécifié" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Intervalle de suppression du journal de notification" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Les notifications de l'utilisateur seront supprimées après le nombre de jours spécifié" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "Intervalle de suppression d'Email" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "Les Emails seront supprimés après le nombre de jours spécifié" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "Protéger le log d'Email" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "Empêcher la suppression des entrées du log d'email" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Support des code-barres" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Activer le support du scanner de codes-barres dans l'interface web" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Résultats des codes-barres des magasins" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Stocker les résultats de la lecture du code-barres dans la base de données" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Scanners de codes-barres Comptage maximal" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Nombre maximum de résultats de lecture de codes-barres à stocker" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Délai d'entrée du code-barres" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Délai de traitement du code-barres" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Prise en charge de la webcam code-barres" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Autoriser la numérisation de codes-barres via la webcam dans le navigateur" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Code-barres Afficher les données" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Afficher les données du code-barres dans le navigateur sous forme de texte" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Plugin de génération de codes-barres" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Plugin à utiliser pour la génération interne de données de code-barres" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Modifications de la pièce" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Activer le champ de modification de la pièce" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "Révision de l'assemblage uniquement" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "N'autoriser les révisions que pour les pièces d'assemblage" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Autoriser la suppression de l'Assemblée" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permettre la suppression de pièces utilisées dans un assemblage" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Expression régulière pour la correspondance avec l'IPN de la Pièce" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Autoriser les IPN dupliqués" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Permettre à plusieurs pièces de partager le même IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Autoriser l'édition de l'IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 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/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Copier les données de la pièce" -#: common/setting/system.py:441 +#: common/setting/system.py:442 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/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Copier les données des paramètres de la pièce" -#: common/setting/system.py:447 +#: common/setting/system.py:448 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/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Copier les données de test de la pièce" -#: common/setting/system.py:453 +#: common/setting/system.py:454 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/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Copier les templates de paramètres de catégorie" -#: common/setting/system.py:459 +#: common/setting/system.py:460 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/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Les pièces sont des templates par défaut" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Les pièces peuvent être assemblées à partir d'autres composants par défaut" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Composant" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Les pièces peuvent être utilisées comme sous-composants par défaut" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Achetable" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Vendable" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Les pièces sont vendables par défaut" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Les pièces sont traçables par défaut" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtuelle" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Les pièces sont virtuelles par défaut" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Afficher les pièces connexes" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Afficher les pièces connexes à une pièce" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Stock initial" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Permettre la création d'un stock initial lors de l'ajout d'une nouvelle pièce" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Données initiales du fournisseur" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permettre la création des données initiales du fournisseur lors de l'ajout d'une nouvelle pièce" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Format d'affichage du nom de la pièce" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Format pour afficher le nom de la pièce" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Icône de catégorie par défaut" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Icône par défaut de la catégorie de la pièce (vide signifie aucune icône)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Nombre minimal de décimales" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Nombre minimum de décimales à afficher lors de l'affichage des prix" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Nombre maximal de décimales pour la tarification" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Nombre maximal de décimales à afficher lors du rendu des données de tarification" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Utiliser le prix fournisseur" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inclure les réductions de prix dans le calcul du prix global" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Remplacer l'historique des achats" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "La tarification historique des bons de commande remplace les réductions de prix des fournisseurs" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Utiliser les prix des articles en stock" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Utiliser les prix des données de stock saisies manuellement pour calculer les prix" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Âge de tarification des articles de stock" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Exclure les articles en stock datant de plus de ce nombre de jours des calculs de prix" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Utiliser les prix variants" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Inclure la tarification variante dans le calcul global des prix" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Variantes actives uniquement" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "N'utiliser que des pièces de variante actives pour calculer le prix de la variante" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "Mise à jour automatique des prix" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "Mettre à jour automatiquement les prix des pièces quand les données internes changes" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Intervalle de regénération des prix" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Nombre de jours avant la mise à jour automatique du prix de la pièce" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Prix internes" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Activer les prix internes pour les pièces" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Substitution du prix interne" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Si disponible, les prix internes remplacent les calculs de la fourchette de prix" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Activer l'impression d'étiquettes" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Activer l'impression d'étiquettes depuis l'interface Web" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "Étiquette image DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 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/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Activer les rapports" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Activer la génération de rapports" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Mode Débogage" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Générer des rapports en mode debug (sortie HTML)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Journal des erreurs" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Enregistrer les erreurs qui se produisent lors de la génération de rapports" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Taille de la page" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Taille de page par défaut pour les rapports PDF" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Renforcer les unités des paramètres" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Si des unités sont fournies, les valeurs de paramètre doivent correspondre aux unités spécifiées" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Numéro de Série Universellement Unique" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Les numéros de série pour les articles en stock doivent être uniques au niveau global" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Supprimer le stock épuisé" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Détermine le comportement par défaut lorsqu'un article de stock est épuisé" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Modèle de code de lot" -#: common/setting/system.py:700 +#: common/setting/system.py:709 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/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Expiration du stock" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Activer la fonctionnalité d'expiration du stock" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Vendre le stock expiré" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Autoriser la vente de stock expiré" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Délai de péremption du stock" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Nombre de jours pendant lesquels les articles en stock sont considérés comme périmés avant d'expirer" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Construction de stock expirée" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Autoriser la construction avec un stock expiré" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Contrôle de la propriété des stocks" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Activer le contrôle de la propriété sur les emplacements de stock et les articles" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Icône par défaut de l'emplacement du stock" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Icône par défaut de l'emplacement du stock (vide signifie aucune icône)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Afficher les pièces en stock installées" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Affichage des articles en stock installés dans les tableaux de stock" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Vérifier la nomenclature lors de l'installation des articles" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Les articles de stock installés doivent exister dans la nomenclature de la pièce mère" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Autoriser le transfert des produits en rupture de stock" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permettre le transfert d'articles qui ne sont pas en stock d'un magasin à l'autre" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Modèle de référence de commande de construction" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Modèle requis pour générer le champ de référence de l'ordre de construction" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Nécessite un Responsable propriétaire" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Un propriétaire responsable doit être assigné à chaque commande" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Exiger une partie active" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Empêcher la création d'un ordre de fabrication pour les pièces inactives" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Requiert une pièce verrouillée" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Empêcher la création d'un ordre de fabrication pour les pièces non verrouillées" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "Exiger une nomenclature valide" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Empêcher la création d'un ordre de fabrication si la nomenclature n'a pas été validée" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "Exiger des ordonnances fermées pour les enfants" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Empêcher l'achèvement de l'ordre de construction jusqu'à ce que tous les ordres d'enfants soient clôturés" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "Ordres de fabrication externes" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "Activer la fonctionnalité d'ordre de fabrication externe" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Blocage jusqu'à la réussite des tests" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Empêcher l'achèvement des résultats de la construction jusqu'à ce que tous les tests requis soient réussis" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Activer les retours de commandes" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Activer la fonctionnalité de retour de commande dans l'interface utilisateur" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Modèle de référence de retour de commande" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Modèle requis pour générer le champ de référence de la commande de retour" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Modifier les retours de commandes terminées" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Autoriser la modification des retours après leur enregistrement" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Modèle de référence de bon de commande" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Modèle requis pour générer le champ de référence du bon de commande" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Expédition par défaut du bon de commande" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Activer la création d'expédition par défaut avec les bons de commandes" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Modifier les commandes de vente terminées" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Autoriser la modification des commandes de vente après avoir été expédiées ou complétées" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "L'expédition nécessite une vérification" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "Empêcher l'achèvement des envois jusqu'à ce que les articles aient été vérifiés" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Marquer les commandes expédiées comme achevées" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Les commandes marquées comme expédiées seront automatiquement complétées, en contournant le statut « expédié »" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Modèle de référence de commande d'achat" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modèle requis pour générer le champ de référence de bon de commande" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Modifier les bons de commande terminés" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Autoriser la modification des bons de commande après avoir été expédiés ou complétés" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Convertir la monnaie" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "Convertir la valeur de l'article dans la devise de base lors de la réception du stock" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Achat automatique des commandes" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marquer automatiquement les bons de commande comme terminés lorsque tous les articles de la ligne sont reçus" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Activer les mots de passe oubliés" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Activer la fonction \"Mot de passe oublié\" sur les pages de connexion" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Activer les inscriptions" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Activer l'auto-inscription pour les utilisateurs sur les pages de connexion" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Activer le SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Activer le SSO sur les pages de connexion" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Activer l'inscription SSO" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Activer l'auto-inscription via SSO pour les utilisateurs sur les pages de connexion" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "Activer la synchronisation du groupe SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Permettre la synchronisation des groupes InvenTree avec les groupes fournis par l'IdP" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "Clé du groupe SSO" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Le nom de l'attribut de revendication de groupe fourni par l'IdP" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "Carte de groupe SSO" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Une correspondance entre les groupes SSO et les groupes InvenTree locaux. Si le groupe local n'existe pas, il sera créé." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Supprimer les groupes en dehors de SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Indique si les groupes attribués à l'utilisateur doivent être supprimés s'ils ne sont pas gérés par l'IdP. La désactivation de ce paramètre peut entraîner des problèmes de sécurité" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Email requis" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Exiger que l'utilisateur fournisse un mail lors de l'inscription" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Saisie automatique des utilisateurs SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Remplir automatiquement les détails de l'utilisateur à partir des données de compte SSO" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Courriel en double" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mail" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Mot de passe deux fois" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mot de passe" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Domaines autorisés" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restreindre l'inscription à certains domaines (séparés par des virgules, commençant par @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Grouper sur inscription" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Groupe auquel les nouveaux utilisateurs sont assignés lors de l'enregistrement. Si la synchronisation des groupes SSO est activée, ce groupe n'est défini que si aucun groupe ne peut être attribué par l'IdP." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Forcer l'authentification multifacteurs" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Les utilisateurs doivent utiliser l'authentification multifacteurs." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Activer ce paramètre demandera à tous les utilisateurs de configurer l'authentification multi-facteurs. Toutes les sessions seront déconnectées immédiatement." -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Vérifier les plugins au démarrage" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Vérifier que tous les plugins sont installés au démarrage - activer dans les environnements conteneurs" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Vérifier les mises à jour des plugins" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Activer les vérifications périodiques pour les mises à jour des plugins installés" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Activer l'intégration d'URL" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Autoriser les plugins à ajouter des chemins URL" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Activer l'intégration de navigation" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Activer les plugins à s'intégrer dans la navigation" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Activer l'intégration de plugins" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Activer l'intégration de plugin pour ajouter des apps" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Activer l'intégration du planning" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Autoriser les plugins à éxécuter des tâches planifiées" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Activer l'intégration des évènements" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Autoriser les plugins à répondre aux évènements internes" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Permettre l'intégration de l'interface" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Permettre aux plugins de s'intégrer dans l'interface utilisateur" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "Activer l'intégration mail" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Autoriser les plugins à traiter les mails entrants/sortants" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "Activer les codes de projet" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Activer les codes de projet pour le suivi des projets" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "Activer la fonctionnalité d'enregistrement des historiques de niveaux de stock et de leur valeur" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Exclure les localisations externes" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Période de l'inventaire automatique" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Afficher les noms des utilisateurs" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Afficher les noms complets des utilisateurs au lieu des noms d'utilisateur" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "Afficher les profils d'utilisateur" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "Afficher les profils des utilisateurs sur leur page de profil" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Activer les données de station de test" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Activer la collecte des données de la station de test pour les résultats de test" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "La pièce est active" msgid "Manufacturer is Active" msgstr "Le fabricant est actif" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "Le fournisseur de la pièce est active" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "La pièce interne est active" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "Le fournisseur est actif" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabricant" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Société" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "A du stock" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Entreprises" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Description de la société" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Description de la société" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Site web" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Site Web de la société" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Numéro de téléphone" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Numéro de téléphone de contact" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Adresse e-mail de contact" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contact" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Point de contact" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Lien externe vers les informations de l'entreprise" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Cette entreprise est-elle active ?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Le client est-il" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Vendez-vous des objets à cette entreprise?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Le fournisseur est-il" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Est-ce que vous achetez des articles à cette entreprise?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Le fabricant est-il" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Cette entreprise fabrique-t-elle des pièces?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Devise par défaut utilisée pour cette entreprise" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "N° de TVA" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "Numéro d'identification fiscale de l'entreprise" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Adresse" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Adresses" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Sélectionner une entreprise" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Intitulé de l'adresse" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Titre décrivant la saisie de l'adresse" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Adresse principale" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Sélectionner comme adresse principale" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Ligne 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Adresse" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Ligne 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Seconde ligne d'adresse" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Code postal" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Ville / Région" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Code postal Ville / Région" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "État / Province" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "État ou province" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Pays" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Pays" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notes du livreur" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Instructions pour le livreur" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Notes pour la livraison interne" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notes internes pour la livraison" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Lien vers les informations de l'adresse (externe)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Pièces du fabricant" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Pièce de base" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Sélectionner une partie" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Sélectionner un fabricant" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "Référence fabricant" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Référence du fabricant" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL pour le lien externe de la pièce du fabricant" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Description de la pièce du fabricant" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Les unités d'emballage doivent être compatibles avec les unités de base" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Les unités d'emballage doivent être supérieures à zéro" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "La pièce du fabricant liée doit faire référence à la même pièce de base" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fournisseur" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Sélectionner un fournisseur" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unité de gestion des stocks des fournisseurs" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Cette partie du fournisseur est-elle active ?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Sélectionner un fabricant" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "Lien de la pièce du fournisseur externe" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Description de la pièce du fournisseur" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "coût de base" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Conditionnement" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Conditionnement de l'article" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Nombre de paquet" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantité totale fournie dans un emballage unique. Laisser vide pour les articles individuels." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "plusieurs" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Commande multiple" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Quantité disponible auprès du fournisseur" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilité mise à jour" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Date de dernière mise à jour des données de disponibilité" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Rupture de prix pour le fournisseur" @@ -4316,7 +4323,7 @@ msgstr "Devise par défaut utilisée pour ce fournisseur" msgid "Company Name" msgstr "Nom de l'entreprise" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "En Stock" @@ -4452,7 +4459,7 @@ msgstr "Le champ n'existe pas dans le modèle cible" msgid "Selected field is read-only" msgstr "Le champ sélectionné est en lecture seule" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Session d'importation" @@ -4464,31 +4471,31 @@ msgstr "Champ d'application" msgid "Column" msgstr "Colonne" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Index des lignes" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Données de la ligne d'origine" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Erreurs" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Valide" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "L'ID est requis pour mettre à jour les enregistrements existants." -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Aucun enregistrement trouvé avec l'ID fourni" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Format d'ID invalide" @@ -4588,7 +4595,7 @@ msgstr "Nombre de copies à imprimer pour chaque étiquette" msgid "Connected" msgstr "Connecté" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Inconnu" @@ -4716,105 +4723,117 @@ msgstr "Progression maximale" msgid "Maximum value for progress type, required if type=progress" msgstr "Valeur maximale pour le type de progression, requis si type=progress" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Référence de commande" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Remarquable" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "A le code du projet" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Créé par" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Créé avant" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Créé après" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "A la date de début" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "Date de début Avant" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "Date de début Après" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "A une date cible" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Date cible Avant" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Date cible Après" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Possède un Tarif" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Terminé avant" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Terminé après" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "Ordre de fabrication externe" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Commande" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Commande Complétée" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Pièces Internes" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Commande En Attente" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Terminé" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Fait l'objet d'une expédition" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Commande d’achat" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Commande d’achat" msgid "Sales Order" msgstr "Commandes" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Prix Total" msgid "Total price for this order" msgstr "Prix total pour cette commande" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Devise de la commande" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Devise de cette commande (laisser vide pour utiliser la devise par défaut de l'entreprise)" @@ -4851,718 +4870,742 @@ msgstr "Devise de cette commande (laisser vide pour utiliser la devise par défa msgid "This order is locked and cannot be modified" msgstr "Cette commande est verrouillée et ne peut être modifiée" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Le contact ne correspond pas à l'entreprise sélectionnée" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "La date de début doit être antérieure à la date cible" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "L'adresse ne correspond pas à la société sélectionnée" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Description de la commande (facultatif)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Sélectionner le code du projet pour cette commande" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Lien vers une page externe" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Date de début" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Date de début prévue pour cette commande" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Date Cible" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Date prévue pour la livraison de la commande. La commande sera en retard après cette date." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Date d'émission" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Date d'émission de la commande" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Utilisateur ou groupe responsable de cette commande" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Point de contact pour cette commande" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Adresse de l'entreprise pour cette commande" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Référence de la commande" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "État" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Statut de la commande d'achat" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Société de laquelle les articles sont commandés" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Référence du fournisseur" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Code de référence de la commande fournisseur" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "reçu par" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Date à laquelle la commande a été complété" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Destination" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Destination des articles reçus" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Le fournisseur de la pièce doit correspondre au fournisseur de la commande" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Le poste ne correspond pas au bon de commande" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Il manque une pièce liée à l'article de la ligne" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "La quantité doit être un nombre positif" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Client" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Société à laquelle les articles sont vendus" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Statut de la commande client" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Référence client " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Code de référence de la commande du client" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Nom de l’expédition" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "expédié par" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "La commande est déjà terminée" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "La commande est déjà annulée" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Seule une commande ouverte peut être marquée comme complète" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "La commande ne peut pas être terminée car il y a des envois incomplets" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "L'ordre ne peut pas être achevé car les allocations sont incomplètes" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "L'ordre ne peut pas être complété car il y a des postes incomplets" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "La commande est verrouillée et ne peut être modifiée" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Nombre d'élement" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Référence du poste" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Notes sur les postes" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Date cible pour ce poste (laisser vide pour utiliser la date cible de la commande)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Description du poste (facultatif)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Contexte supplémentaire pour cette ligne" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Prix unitaire" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "Poste du bon de commande" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "La pièce du fournisseur doit correspondre à celle du fournisseur" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "L'ordre de fabrication doit être marqué externe" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "Les ordres de fabrication ne peuvent être liées qu'à des pièces d'assemblage" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "Les pièces d'ordre de fabrication doivent correspondre la pièce d'objet" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Pièce fournisseur" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Reçu" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Prix d'achat" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Prix d'achat unitaire" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "Ordre de fabrication externe à remplir par cet élément de ligne" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "Ligne supplémentaire du bon de commande" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "Poste de commande client" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Seules les pièces vendues peuvent être attribuées à une commande" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Prix de vente" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Prix de vente unitaire" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Expédié" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Quantité expédiée" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "Envoi de la commande client" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "L'adresse d'expédition doit correspondre au client" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "Adresse de livraison pour cet envoi" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Date d'expédition" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Date de Livraison" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Date de livraison de l'envoi" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Vérifié par" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Utilisateur qui a vérifié cet envoi" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envoi" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Numéro d'expédition" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "N° de suivi" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Information de suivi des colis" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "N° de facture" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Numéro de référence de la facture associée" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Le colis a déjà été envoyé" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "L'expédition n'a pas d'articles en stock alloués" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "L'expédition doit être vérifiée avant de pouvoir être terminée" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "Ligne supplémentaire de commande client" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "Affectation des commandes clients" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "L'article de stock n'a pas été assigné" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Impossible d'allouer l'article en stock à une ligne avec une autre pièce" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Impossible d'allouer le stock à une ligne sans pièce" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantité d'allocation ne peut pas excéder la quantité en stock" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantité doit être égale à 1 pour un article de stock sérialisé" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "La commande client ne correspond pas à l'expédition" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "L'envoi ne correspond pas à la commande client" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Ligne" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Référence de l'expédition de la commande client" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Article" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Sélectionner l'article de stock à affecter" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Saisir la quantité d'allocation de stock" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Retour Référence de la commande" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Entreprise à l'origine du retour des articles" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Statut du retour de commande" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "Poste de l'ordre de retour" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "L'article en stock doit être spécifié" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "La quantité retournée dépasse la quantité en stock" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "La quantité retournée doit être supérieure à zéro" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "Quantité non valide pour un article de stock sérialisé" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Sélectionner l'article à retourner par le client" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Date de réception" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "La date de réception de cet article en retour" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Résultats" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Résultat pour ce poste" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Coût associé au retour ou à la réparation de ce poste" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "Ordre de retour Ligne supplémentaire" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID de commande" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID de l'ordre à dupliquer" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Copier des lignes" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Copier les postes de l'ordre original" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Copier les lignes supplémentaires" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Copier les postes supplémentaires de l'ordre original" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Copier les paramètres" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Postes de travail" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Lignes achevées" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplicata de commande" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Spécifier les options de duplication de cette commande" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "ID de commande invalide" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Nom du fournisseur" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Permettre la clôture d'une commande avec des postes incomplets" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "La commande comporte des postes incomplets" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "La commande n'est pas ouverte" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Tarification automobile" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calculer automatiquement le prix d'achat sur la base des données de pièces du fournisseur" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Fusionner des éléments" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Fusionner en un seul poste les éléments ayant la même partie, la même destination et la même date cible" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "Unité de gestion des stocks" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Numéro de pièce interne" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Nom de la pièce interne" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "La pièce du fournisseur doit être spécifiée" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Le bon de commande doit être spécifié" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Le fournisseur doit correspondre au bon de commande" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Le bon de commande doit correspondre au fournisseur" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Poste" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Sélectionner le lieu de destination des envois reçus" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Saisir le code de lot pour les articles de stock entrant" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Date d'expiration" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "Saisir la date d'expiration des articles de stock entrant" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Entrez les numéros de série pour les articles de stock entrants" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "Remplacer les informations d'emballage pour les articles en stock entrants" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "Note supplémentaire pour les articles en stock entrant" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Code-barres" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Code-barres scanné" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Les postes doivent être fournis" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "L'emplacement de la destination doit être spécifié" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Les valeurs de code-barres fournies doivent être uniques" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Envois" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Envois terminés" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "Lignes allouées" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Devise du prix de vente" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Postes alloués" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Aucun détail sur l'expédition n'est fourni" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Le poste n'est pas associé à cette commande" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "La quantité doit être positive" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "L'envoi a déjà été effectué" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "L'envoi n'est pas associé à cette commande" -#: order/serializers.py:1777 +#: order/serializers.py:1768 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:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Les numéros de série suivants sont indisponibles" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Poste de commande de retour" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Le poste ne correspond pas à l'ordre de retour" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Le poste a déjà été reçu" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Les articles ne peuvent être reçus que pour des commandes en cours" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "Quantité à retourner" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Devise du prix de la ligne" @@ -5598,146 +5641,146 @@ msgstr "Remboursement" msgid "Reject" msgstr "Refuser" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Bon de commande en souffrance" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Le bon de commande {po} est maintenant en retard" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Commande en souffrance" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "La commande {so} est maintenant en retard" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Ordre de retour en retard" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "L'ordre de retour {ro} est maintenant en retard" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Étoilé" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filtrer par catégories étoilées" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Profondeur" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtrer par profondeur de catégorie" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Premier niveau" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtrer par catégories de premier niveau" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Cascade" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Inclure les sous-catégories dans les résultats filtrés" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Parent" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filtrer par catégorie de parents" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Exclure les sous-catégories de la catégorie spécifiée" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "A des résultats" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Est variante" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Est la révision" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "A des révisions" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Nomenclature valide" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Catégories en cascade" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Si vrai, inclure des éléments dans les sous-catégories de la catégorie donnée" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtrer par ID de catégorie numérique ou par 'null'" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "La pièce d'assemblage est active" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "La pièce d'assemblage est traçable" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "La pièce d'assemblage est testable" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "Le composant est testable" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Utilise" @@ -5750,7 +5793,7 @@ msgstr "Catégorie de composant" msgid "Part Categories" msgstr "Catégories de composants" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Emplacement par défaut" @@ -5778,7 +5821,7 @@ msgstr "Mots-clés par défaut pour les pièces de cette catégorie" msgid "Icon" msgstr "Icône" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icône (facultatif)" @@ -5799,7 +5842,7 @@ msgstr "Valeur par Défaut" msgid "Default Parameter Value" msgstr "Valeur par défaut du paramètre" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Pièces" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "Une partie ne peut pas être une révision d'elle-même" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "Impossible d'effectuer une révision d'une partie qui est déjà une révision" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "Le code de révision doit être spécifié" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "Les révisions ne sont autorisées que pour les pièces d'assemblage" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "Impossible d'effectuer une révision d'un modèle de pièce" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "La partie parentale doit pointer vers le même modèle" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Il existe déjà un article en stock avec ce numéro de série" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dupliqué non autorisé dans les paramètres de la pièce" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "La révision de la pièce existe déjà en double." -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Une pièce avec ce nom, IPN et révision existe déjà." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Les pièces ne peuvent pas être affectées à des catégories de pièces structurelles !" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Nom de l'article" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Est un modèle" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Cette pièce est-elle une pièce modèle ?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Cette pièce est-elle une variante d'une autre pièce ?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Description de la pièce (facultatif)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Mots-clés" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Les mots-clés partiels pour améliorer la visibilité dans les résultats de recherche" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Numéro de révision ou de version de la pièce" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Révision" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "Cette partie est-elle une révision d'une autre partie ?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Révision de" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Où cet article est-il normalement stocké ?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Expiration par défaut" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Délai d'expiration (en jours) pour les articles en stock de cette pièce" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Stock Minimum" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Niveau de stock minimum autorisé" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Unités de mesure pour cette partie" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Cette pièce peut-elle être fabriquée à partir d'autres pièces ?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Cette pièce peut-elle être utilisée pour construire d'autres pièces ?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Cette partie dispose-t-elle d'un suivi pour les articles uniques ?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "Des résultats de tests peuvent-ils être enregistrés pour cette pièce ?" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Cette pièce peut-elle être achetée auprès de fournisseurs externes ?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Cette pièce peut-elle être vendue aux clients ?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Est-ce que cette pièce est active ?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Les parties verrouillées ne peuvent pas être modifiées" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "S'agit-il d'un élément virtuel, tel qu'un logiciel ou une licence ?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "Nomenclature validée" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "Est-ce que la nomenclature pour cette pièce est correcte ?" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Somme de contrôle de la nomenclature" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Somme de contrôle de la nomenclature enregistrée" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "Nomenclature vérifiée par" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Date de vérification de la nomenclature" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Création Utilisateur" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Propriétaire responsable de cette pièce" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Devise utilisée pour cacher les calculs de prix" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Coût minimum de la nomenclature" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Coût minimal des composants" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Coût maximal de la nomenclature" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Coût maximal des composants" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Coût d'achat minimum" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Coût d'achat historique minimum" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Coût d'achat maximum" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Coût d'achat historique maximum" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Prix interne minimum" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Coût minimum basé sur des ruptures de prix internes" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Prix interne maximum" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Coût maximum basé sur les écarts de prix internes" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Prix minimum du fournisseur" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Prix minimum des pièces provenant de fournisseurs externes" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Prix maximum du fournisseur" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Prix maximum des pièces provenant de fournisseurs externes" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Coût minimum de la variante" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Calcul du coût minimum des pièces de la variante" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Coût maximal de la variante" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Calcul du coût maximal des pièces de la variante" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Coût minimal" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Remplacer le coût minimum" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Coût maximal" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Dépassement du coût maximal" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Calcul du coût minimum global" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Calcul du coût maximum global" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Prix de vente minimum" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Prix de vente minimum basé sur des ruptures de prix" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Prix de vente maximum" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Prix de vente maximum en fonction des écarts de prix" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Coût minimum de vente" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Prix de vente historique minimum" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Coût de vente maximum" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Prix de vente historique maximum" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Partie pour l'inventaire" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Nombre d'articles" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Nombre d'entrées individuelles au moment de l'inventaire" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Stock total disponible au moment de l'inventaire" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Date" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Date de l'inventaire" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Coût minimum du stock" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Coût minimum estimé des stocks disponibles" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Coût maximal du stock" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Coût maximum estimé des stocks disponibles" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "Vente de pièces détachées Prix cassé" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "Modèle de test partiel" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Le nom du modèle n'est pas valide - il doit comporter au moins un caractère alphanumérique" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Les modèles de test ne peuvent être créés que pour les parties testables" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "Un modèle de test avec la même clé existe déjà pour la partie" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Nom de test" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Entrez un nom pour le test" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "Clé de test" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "Clé simplifiée pour le test" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Description du test" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Saisir la description de ce test" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "Ce test est-il activé ?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Requis" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Ce test est-il obligatoire pour passer l'examen ?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Valeur requise" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Ce test nécessite-t-il une valeur lors de l'ajout d'un résultat de test ?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Nécessite une pièce jointe" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Ce test nécessite-t-il un fichier joint lors de l'ajout d'un résultat de test ?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "Choix valables pour ce test (séparés par des virgules)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "L'article de nomenclature ne peut pas être modifié - l'assemblage est verrouillé" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Le poste de nomenclature ne peut pas être modifié - l'assemblage de la variante est verrouillé" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Sélectionner la partie parentale" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Sous-partie" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Sélectionner la pièce à utiliser dans la nomenclature" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Quantité de nomenclature pour ce poste de nomenclature" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Ce poste de nomenclature est facultatif" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ce poste de nomenclature est consommable (il n'est pas suivi dans les ordres de fabrication)." -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "Définir la quantité" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "Attrition" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Attrition estimée pour cette fabrication, exprimée en pourcentage (0-100)" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "Arrondi au multiple" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Arrondir la quantité de production requise au multiple le plus proche de cette valeur" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Référence du poste de nomenclature" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Notes sur les postes de nomenclature" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Somme de contrôle" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Somme de contrôle de la ligne de nomenclature" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Validée" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Ce poste de nomenclature a été validé" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Obtient l'héritage" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ce poste de nomenclature est hérité des nomenclatures des composants variants" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Les postes de stock pour les composants variants peuvent être utilisés pour ce poste de nomenclature" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La quantité doit être un nombre entier pour les pièces pouvant être suivies" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "La sous-partie doit être spécifiée" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Remplacement d'un poste de nomenclature" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "La pièce de remplacement ne peut pas être identique à la pièce maîtresse" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Poste de nomenclature parent" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Pièce de rechange" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Première partie" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Partie 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Sélectionner une partie connexe" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Note pour cette relation" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Il n'est pas possible de créer une relation entre une pièce et elle-même" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Une relation en double existe déjà" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Catégorie de parents" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Catégorie de pièce mère" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Sous-catégories" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Résultats" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Nombre de résultats enregistrés par rapport à ce modèle" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Devise d'achat de l'item" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Le fichier n'est pas une image" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Partie originale" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Sélectionner la partie originale à dupliquer" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Copier l'image" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Copier l'image à partir de la partie originale" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copier la nomenclature" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Copie de la nomenclature de la pièce originale" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Copier les paramètres" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Copie des données de paramètres de la pièce d'origine" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Notes sur la copie" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Copier les notes de la partie originale" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Test Copie" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Quantité de stock initial" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Indiquer la quantité de stock initiale pour cette pièce. Si la quantité est égale à zéro, aucun stock n'est ajouté." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Emplacement initial du stock" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Spécifier l'emplacement du stock initial pour cette pièce" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Sélectionner le fournisseur (ou laisser en blanc pour passer)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Sélectionner le fabricant (ou laisser en blanc pour ignorer)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Numéro de pièce du fabricant" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "L'entreprise sélectionnée n'est pas un fournisseur valide" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "L'entreprise sélectionnée n'est pas un fabricant valide" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "La pièce du fabricant correspondant à ce MPN existe déjà" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "La pièce du fournisseur correspondant à cette UGS existe déjà" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Nom catégorie" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Construction" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Quantité de cette pièce actuellement en production" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Quantité exceptionnelle de cette pièce sont planifié à la fabrication" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Éléments en stock" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "Révisions" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Stock total" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Stock non attribué" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Variante Stock" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Dupliquer une pièce" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Copier les données initiales d'une autre partie" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Stock initial" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Créer une pièce avec une quantité de stock initiale" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Informations sur le fournisseur" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Ajouter les informations initiales du fournisseur pour cette pièce" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Copier les paramètres de la catégorie" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Copier les modèles de paramètres de la catégorie de pièces sélectionnée" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Image existante" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Nom de fichier d'une image de pièce existante" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Le fichier image n'existe pas" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Valider l'ensemble de la nomenclature" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Peut construire" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Nécessaire pour fabrication" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Alloué à la fabrication" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Nécessaire pour les commandes" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Alloué aux commandes" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Prix Minimum" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Remplacer la valeur calculée pour le prix minimum" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Prix minimum monnaie" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Prix Maximum" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Remplacer la valeur calculée pour le prix maximum" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Devise du prix maximum" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Mise à jour" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Mise à jour des prix pour cette pièce" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Impossible de convertir les devises fournies en {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Le prix minimum ne doit pas être supérieur au prix maximum" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Le prix maximum ne doit pas être inférieur au prix minimum" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Sélectionner l'assemblage parent" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Sélectionner le composant" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Sélectionner la pièce à partir de laquelle copier la nomenclature" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Supprimer les données existantes" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Supprimer les postes de nomenclature existants avant de les copier" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Inclure l'héritage" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclure les éléments de nomenclature hérités des pièces modélisées" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Sauter les lignes non valides" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Activez cette option pour ignorer les lignes non valides" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Copier les pièces de remplacement" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copie de pièces de rechange en cas de duplication de postes de nomenclature" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notification de stock faible" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Le stock disponible pour {part.name}, est tombé en dessous du niveau minimum configuré" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Pas de date d'expieatio" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Expire aujourd’hui" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} jours" @@ -7580,64 +7620,77 @@ msgstr "Prise en charge de la lecture des codes-barres TME" msgid "The Supplier which acts as 'TME'" msgstr "Le fournisseur qui agit en tant que \"TME" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Seuls les membres du personnel peuvent administrer les plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "L'installation du plugin est désactivée" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Installation réussie du plugin" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Installation du plugin dans {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Le plugin n'a pas été trouvé dans le registre" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Le plugin n'est pas un plugin packagé" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Le nom du paquet du plugin n'a pas été trouvé" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Seuls les membres du personnel peuvent administrer les plugins" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "La désinstallation des plugins est désactivée" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Le plugin ne peut pas être désinstallé car il est actuellement actif" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Le plugin n'est pas installé" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "L'installation du plugin n'a pas été trouvée" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Désinstallation réussie du plugin" @@ -7689,21 +7742,21 @@ msgstr "Plugin Package" msgid "Plugin" msgstr "Extension" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Aucun auteur trouvé" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Le plugin '{p}' n'est pas compatible avec la version actuelle d'InvenTree {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Le plugin nécessite au moins la version {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Le plugin nécessite au maximum la version {v}" @@ -7884,51 +7937,51 @@ msgstr "Installation non confirmée" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Recharge complète" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Effectuer un rechargement complet du registre des plugins" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Forcer le rechargement" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Forcer le rechargement du registre des plugins, même s'il est déjà chargé" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Collecter les plugins" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Collecter les plugins et les ajouter au registre" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Activer le plugin" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Activer ce plugin" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Supprimer la configuration" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Supprimer la configuration du plugin de la base de données" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "Total" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Numéro de série" @@ -8215,7 +8268,7 @@ msgstr "Rapport de test des articles en stock" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Éléments installés" @@ -8248,184 +8301,196 @@ msgstr "Pas de résultat (obligatoire)" msgid "No result" msgstr "Pas de résultat" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Le fichier d'actifs n'existe pas" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Fichier image non trouvé" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "la balise part_image nécessite une instance de Part" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "la balise company_image nécessite une instance d'entreprise" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filtrer par profondeur de localisation" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Filtrer par lieux de premier niveau" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Inclure les sous-emplacements dans les résultats filtrés" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Emplacement parent" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtrer par emplacement parent" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Nom de la pièce (insensible à la casse)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Le nom de la pièce contient (insensible à la casse)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Nom de la pièce (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Partie IPN (insensible à la casse)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "La partie IPN contient (insensible à la casse)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Partie IPN (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Stock minimum" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Stock maximum" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Code de statut" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Emplacement externe" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Consommé par l'ordre de construction" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Installé dans un autre article en stock" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Arbre en pièces détachées" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Mise à jour avant" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Mise à jour après" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Inventaire avant" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Inventaire après" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Date d'expiration avant" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Date d’expiration après" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Périmé" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "La quantité est requise" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "La partie valide doit être fournie" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Le fournisseur donné n'existe pas" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "La pièce du fournisseur a une taille d'emballage définie, mais le drapeau use_pack_size n'est pas activé" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Les numéros de série ne peuvent pas être fournis pour une pièce non traçable" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "Types d'emplacements de stock" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Icône par défaut pour tous les lieux qui n'ont pas d'icône (facultatif)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Emplacement du stock" @@ -8449,11 +8514,11 @@ msgstr "Emplacement du stock" msgid "Stock Locations" msgstr "Emplacement des stocks" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Propriétaire" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Sélectionner un propriétaire" @@ -8481,274 +8546,274 @@ msgstr "Type d'emplacement du stock de cet emplacement" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Vous ne pouvez pas rendre ce magasin structurel car certains articles de stock y sont déjà localisés !" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "La pièce doit être spécifiée" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Les articles en stock ne peuvent pas être localisés dans des emplacements de stock structurel !" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Il n'est pas possible de créer un article de stock pour les pièces virtuelles" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Le type de pièce ('{self.supplier_part.part}') doit être {self.part}" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 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:966 +#: stock/models.py:968 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:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "L'objet ne peut pas s'appartenir à lui-même" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "L'élément doit avoir une référence de construction si is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "La référence de construction ne pointe pas vers le même objet de pièce" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Poste de stock parent" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Pièce de base" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Sélectionnez une pièce fournisseur correspondante pour cet article en stock" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Où se trouve cet article en stock ?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "L'emballage de cet article en stock est stocké dans" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Installé dans" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "L'article a été installé dans un autre article ?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Numéro de série pour cet article" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Code de lot pour cet article de stock" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Quantité en stock" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Source Construire" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Construire pour cet article en stock" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Consommé par" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Ordre de construction qui a consommé cet article de stock" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Bon de commande source" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Commande d'achat pour cet article en stock" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Destination de la commande client" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Date d'expiration de l'article en stock. Le stock sera considéré comme périmé après cette date" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Supprimer lors de l'épuisement" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Supprimer ce poste de stock lorsque le stock est épuisé" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Prix d'achat de l'unité unique au moment de l'achat" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Converti en partie" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "La pièce n'est pas définie comme pouvant faire l'objet d'un suivi" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "La quantité doit être un nombre entier" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "La quantité ne doit pas dépasser la quantité disponible en stock ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Les numéros de série doivent être fournis sous forme de liste" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "La quantité ne correspond pas au nombre de numéros de série" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Le modèle de test n'existe pas" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Un article de stock a été affecté à une commande client" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "L'article de stock est installé dans un autre article" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "L'article de stock contient d'autres articles" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Un article de stock a été affecté à un client" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "L'article de stock est actuellement en production" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Le stock sérialisé ne peut pas être fusionné" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Articles de stock en double" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Les articles en stock doivent se référer à la même pièce" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Les articles en stock doivent se référer à la même pièce du fournisseur" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Les codes d'état des stocks doivent correspondre" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "StockItem ne peut pas être déplacé car il n'est pas en stock" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Suivi des articles en stock" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Notes d'entrée" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Résultat du test de l'article en stock" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Une valeur doit être fournie pour ce test" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "La pièce jointe doit être téléchargée pour ce test" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Valeur non valide pour ce test" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Résultat du test" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Valeur de sortie du test" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Pièce jointe au résultat du test" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Notes de test" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "Station de test" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "L'identifiant de la station de test où le test a été effectué" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "Commencé" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Horodatage du début du test" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "Fini" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Horodatage de la fin du test" @@ -8792,246 +8857,246 @@ msgstr "Sélectionner la pièce pour laquelle un numéro de série doit être g msgid "Quantity of serial numbers to generate" msgstr "Nombre de numéros de série à générer" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "Modèle de test pour ce résultat" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "L'ID du modèle ou le nom du test doit être fourni" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "L'heure de fin du test ne peut être antérieure à l'heure de début du test" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Article Parent" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "Article de stock parent" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Utiliser la taille de l'emballage lors de l'ajout : la quantité définie est le nombre d'emballages" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Entrez les numéros de série pour les nouveaux articles" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Référence du fournisseur" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Expiré" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Éléments enfants" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "Suivi des éléments" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Prix d'achat de cet article en stock, par unité ou par paquet" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Entrez le nombre d'articles en stock à sérialiser" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La quantité ne doit pas dépasser la quantité disponible en stock ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Emplacement du stock de destination" -#: stock/serializers.py:735 +#: stock/serializers.py:746 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:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Les numéros de série existent déjà" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Sélectionner l'article de stock à installer" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Quantité à installer" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Saisir la quantité d'articles à installer" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Ajouter une note de transaction (facultatif)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "La quantité à installer doit être d'au moins 1" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "L'article en stock n'est pas disponible" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "La pièce sélectionnée ne figure pas dans la nomenclature" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "La quantité à installer ne doit pas dépasser la quantité disponible" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Emplacement de destination de l'élément désinstallé" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Sélectionner la pièce à convertir en article de stock" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "La partie sélectionnée n'est pas une option valide pour la conversion" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Impossible de convertir un article de stock auquel un SupplierPart a été attribué" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Code d'état de l'article en stock" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Sélectionner les articles en stock pour modifier leur statut" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Aucun article en stock n'a été sélectionné" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Sous-localisations" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "Emplacement du stock mère" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "La pièce doit être vendable" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "L'article est affecté à une commande client" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "L'article est attribué à un ordre de fabrication" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Affectation d'articles en stock par le client" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "L'entreprise sélectionnée n'est pas un client" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Notes d'affectation des stocks" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Une liste des articles en stock doit être fournie" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Notes sur les fusions d'actions" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Autoriser les fournisseurs non concordants" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permettre la fusion d'articles en stock avec des pièces de fournisseurs différents" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Autoriser la non-concordance des statuts" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Permettre la fusion d'articles en stock ayant des codes de statut différents" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Au moins deux articles en stock doivent être fournis" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Pas de changement" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Valeur de la clé primaire StockItem" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "L'article n'est plus en stock" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Notes sur les transactions boursières" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "Numéro de série suivant" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "Numéro de série précédent" @@ -9537,59 +9602,75 @@ msgstr "Nom de famille de l'utilisateur" msgid "Email address of the user" msgstr "Adresse e-mail de l'utilisateur" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Cet utilisateur a-t-il les permissions du staff" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Super-utilisateur" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Cet utilisateur est-il un super-utilisateur" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Ce compte d'utilisateur est-il actif" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "Seul un superutilisateur peut modifier ce champ" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "Mot de passe" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "Mot de passe pour l'utilisateur" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "Écraser l'alerte sur les règles de mot de passe" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "Vous n'avez pas le droit de créer des utilisateurs" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Votre compte a été créé." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Veuillez utiliser la fonction de réinitialisation du mot de passe pour vous connecter" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Bienvenue dans InvenTree" diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po index baff9344dc..cd79fc4839 100644 --- a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "למשתמש אין הרשאה לצפות במוזל הזה" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -112,13 +104,13 @@ msgstr "הזן תאריך סיום" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "" @@ -131,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "מספרים סידוריים לא נמצאו" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +215,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "אימייל" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "מספר האסמכתה גדול מדי" msgid "Invalid choice" msgstr "בחירה שגויה" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "שם" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "תיאור" msgid "Description (optional)" msgstr "תיאור (לא חובה)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "נתיב" @@ -313,75 +321,66 @@ msgstr "Hash ייחודי של נתוני ברקוד" msgid "Existing barcode found" msgstr "נמצא ברקוד קיים" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "שגיאת שרת" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "נרשמה שגיאה על ידי השרת." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "מטבע" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "בחר מטבע מהאפשרויות הזמינות" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "סינית (פשוטה)" msgid "Chinese (Traditional)" msgstr "סינית (מסורתית)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "קוד מטבע לא מאושר" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "מקור הבנייה" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "רכיב" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "מקט" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "בחר רכיב לבנייה" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "כמות בניה" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "קישור חיצוני" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "כמות" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "מספרים סידוריים" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "מבוטל" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "הושלם" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "משתמש" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "קישור" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "קובץ מצורף" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "קובץ חסר" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "חסר קישור חיצוני" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "בחר קובץ לצירוף" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "הערה" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "שם קובץ" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "נשלח" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po index 0abbe4120d..803293d0ae 100644 --- a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -112,13 +104,13 @@ msgstr "तारीख दर्ज करें" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "" @@ -131,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "कनेक्शन त्रुटि" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +215,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "ई-मेल" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "" @@ -313,75 +321,66 @@ msgstr "" msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po index 7ce08360d5..35ee131187 100644 --- a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API funkciót nem találom" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Tömeges művelethez tételek vagy szűrők megadása kötelező" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "A tételeket listában kell átadni" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Érvénytelen a tétel lista" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "A szűrőket dict - szótár - formában kell megadni" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Érvénytelen szűrők vannak megadva" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Minden szűrő csak true értékkel használható" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Nincs a szűrésnek megfelelő tétel" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Nincs adat megadva" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Ennek a mezőnek egyedinek kell lennie." -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Nincs jogosultságod az adatok megtekintéséhez" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "{original} átváltása {unit}-ra sikertelen" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Nem megfelelő mennyiség" @@ -112,13 +104,13 @@ msgstr "Dátum megadása" msgid "Invalid decimal value" msgstr "Érvénytelen decimális érték" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Megjegyzések" @@ -131,75 +123,91 @@ msgstr "A(z) '{name}' érték nem a szükséges minta szerinti" msgid "Provided value does not match required pattern: " msgstr "A megadott érték nem felel meg a szükséges mintának: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Nem lehet 1000 tételnél többet szerializálni" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Üres sorozatszám" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Duplikált sorozatszám" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Érvénytelen csoport: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Csoport tartomány {group} több mint az engedélyezett ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Nem található sorozatszám" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "A megadott számú egyedi sorozatszám ({n}) meg kell egyezzen a darabszámmal ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "HTML tag-ek eltávolítása ebből az értékből" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Az adatban tiltott markdown tartalom található" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Csatlakozási hiba" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "A kiszolgáló érvénytelen státuszkóddal válaszolt" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Kivétel történt" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "A kiszolgáló érvénytelen Content-Length értéket adott" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "A kép mérete túl nagy" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "A kép letöltés meghaladja a maximális méretet" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "A kiszolgáló üres választ adott" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "A megadott URL nem egy érvényes kép fájl" @@ -207,11 +215,11 @@ msgstr "A megadott URL nem egy érvényes kép fájl" msgid "Log in to the app" msgstr "Bejelentkezés az appba" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Mielőtt továbbmenne kötelező a kétfaktoros authentikációt engedélyeznie." @@ -259,18 +267,18 @@ msgstr "Azonosító szám túl nagy" msgid "Invalid choice" msgstr "Érvénytelen választás" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Név" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Leírás" msgid "Description (optional)" msgstr "Leírás (opcionális)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Elérési út" @@ -313,75 +321,66 @@ msgstr "Egyedi vonalkód hash" msgid "Existing barcode found" msgstr "Létező vonalkód" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Feladat hiba" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Az '{f}' háttérfeladat elbukott {n} próbálkozás után" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Kiszolgálóhiba" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "A kiszolgáló egy hibaüzenetet rögzített." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Kép" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Pénznem" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Válassz pénznemet a lehetőségek közül" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "Ez a mező nem lehet null." -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Érvénytelen érték" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Távoli kép" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "A távoli kép URL-je" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Képek letöltése távoli URL-ről nem engedélyezett" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Nem sikerült letölteni a képet a távoli URL-ről" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "Érvénytelen tartalomtípus-formátum" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "Tartalomtípus nem található" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "A tartalomtípus nem egyezik a szükséges mixin osztállyal" @@ -537,11 +536,11 @@ msgstr "Kínai (egyszerűsített)" msgid "Chinese (Traditional)" msgstr "Kínai (Hagyományos)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Frissítés elérhető" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "InvenTree frissítés elérhető" @@ -553,30 +552,30 @@ msgstr "Érvénytelen fizikai mértékegység" msgid "Not a valid currency code" msgstr "Érvénytelen pénznem kód" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Rendelés állapota" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Szülő gyártás" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Változatokkal együtt" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Változatokkal együtt" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Változatokkal együtt" msgid "Part" msgstr "Alkatrész" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategória" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Szülő Gyártás" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Hozzám rendelt" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Hozzárendelve" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Ez előtt létrehozva" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Létrehozva ez után" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Van kezdeti dátuma" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Kezdeti dátum ez előtt" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Kezdeti dátum ez után" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Van céldátum" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Céldátum ez előtt" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Céldátum ez után" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Elkészült ez előtt" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Elkészült ez után" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Ettől a dátumtól" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Eddig a dátumig" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Fa kihagyása" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "A gyártást be kell fejezni a törlés előtt" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Fogyóeszköz" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Opcionális" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Gyártmány" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Követett" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Ellenőrizhető" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Befejezetlen rendelés" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Lefoglalva" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Felhasználva" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Elérhető" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Rendelve" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "Gyártás nem található" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Gyártási utasítás" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Hely" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Kimenet" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Szűrés a kimeneti készlet tétel azonosítójára. Használj 'null'-t ha a be nem épített gyártási tételeket keresed." @@ -748,41 +751,41 @@ msgstr "Szűrés a kimeneti készlet tétel azonosítójára. Használj 'null'-t msgid "Build Orders" msgstr "Gyártási utasítások" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Az alkatrészjegyzék még nincs jóváhagyva" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Nem lehet inaktív alkatrészre Gyártást kezdeményezni" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Nem lehet lezáratlan alkatrészre Gyártást kezdeményezni" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Gyártási rendeléseket kizárólag beszerezhető alkatrészekkel lehet külső forrásból teljesíteni" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Meg kell adni felelős felhasználót vagy csoportot" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Gyártási rendelés alkatrész nem változtatható" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Céldátumnak a kezdeti dátum után kell lennie" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Gyártási utasítás azonosító" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Gyártási utasítás azonosító" msgid "Reference" msgstr "Azonosító" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Gyártás rövid leírása (opcionális)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" -msgstr "" +msgstr "Gyártási megrendelés, amelyhez ez a gyártás hozzá van rendelve" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Válassz alkatrészt a gyártáshoz" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Vevői rendelés azonosító" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" -msgstr "" +msgstr "Vevői rendelés, amelyhez ez a gyártás tartozik" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Forrás hely" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Válassz helyet ahonnan készletet vegyünk el ehhez a gyártáshoz (hagyd üresen ha bárhonnan)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Külső gyártás" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Ez a gyártási rendelés külsőleg teljesül" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Cél hely" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Válassz helyet ahol a kész tételek tárolva lesznek" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Gyártási mennyiség" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Gyártandó készlet tételek száma" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Kész tételek" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Elkészült készlet tételek száma" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Gyártási állapot" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Gyártás státusz kód" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Batch kód" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Batch kód a gyártás kimenetéhez" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Létrehozás dátuma" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Gyártás kezdeti dátuma" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Gyártási rendelés ütemezett kezdeti dátuma" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Befejezés cél dátuma" -#: build/models.py:376 +#: build/models.py:379 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:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Befejezés dátuma" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "elkészítette" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Indította" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Felhasználó aki ezt a gyártási utasítást kiállította" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Felelős" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Felhasználó vagy csoport aki felelős ezért a gyártásért" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Külső link" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link külső URL-re" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Priorítás" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Gyártási utasítás priorítása" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Projektszám" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Projekt kód a gyártáshoz" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "A gyártási rendelés nem befejezhető amíg nyitott al-gyártások vannak" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "A gyártási rendelés nem befejezhető amíg hiányos a kimenet" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "A gyártási foglalások teljesítése háttérfeladat elvégzése nem sikerült" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "A {build} gyártási utasítás elkészült" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Gyártási utasítás elkészült" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Egyedi követésre jelölt alkatrészeknél kötelező sorozatszámot megadni" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nincs gyártási kimenet megadva" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Gyártási kimenet már kész" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Gyártási kimenet nem egyezik a gyártási utasítással" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "A mennyiség nem lehet több mint a gyártási mennyiség" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "A gyártási kimenet nem felelt meg az összes kötelező teszten" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "A {serial} gyártási kimenet nem felelt meg az összes kötelező teszten" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" -msgstr "" +msgstr "A lefoglalt készletelemek még gyártás alatt vannak" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Nem lehet részben befejezni egy építési kimenetet lefoglalt tételekkel" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Gyártási Rendelés Sor Tétel" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Gyártás objektum" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,450 +1032,446 @@ msgstr "Gyártás objektum" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Mennyiség" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Gyártáshoz szükséges mennyiség" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Felhasznált készlet mennyisége" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Gyártási tételnek meg kell adnia a gyártási kimenetet, mivel a fő darab egyedi követésre kötelezett" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" -msgstr "" +msgstr "A lefoglalt mennyiségnek nullánál nagyobbnak kell lennie" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Egyedi követésre kötelezett tételeknél a menyiség 1 kell legyen" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "A lefoglalt mennyiség ({q}) nem lépheti túl a szabad készletet ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Készlet túlfoglalva" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Készlet tétel" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Forrás készlet tétel" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Beépítés ebbe" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Cél készlet tétel" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Gyártási Szint" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Alkatrész neve" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Gyártás kimenet" -#: build/serializers.py:221 +#: build/serializers.py:219 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:225 +#: build/serializers.py:223 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:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Ez a gyártási kimenet már elkészült" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Ez a gyártási kimenet nincs teljesen lefoglalva" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Add meg a mennyiséget a gyártás kimenetéhez" -#: build/serializers.py:333 +#: build/serializers.py:331 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:339 +#: build/serializers.py:337 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:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Sorozatszámok" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Legyártott készlet helye" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Sorozatszámok automatikus hozzárendelése" -#: build/serializers.py:380 +#: build/serializers.py:378 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:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "A következő sorozatszámok már léteznek vagy nem megfelelőek" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "A gyártási kimenetek listáját meg kell adni" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Selejtezet gyártási kimenetek helye" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Foglalások törlése" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Selejtezett kimenetek foglalásainak felszabadítása" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Selejtezés oka" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "A kész gyártási kimenetek helye" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Hiányos foglalás elfogadása" -#: build/serializers.py:567 +#: build/serializers.py:565 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:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Lefoglalt készlet felhasználása" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Az összes ehhez a gyártáshoz lefoglalt készlet felhasználása" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Befejezetlen kimenetek törlése" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "A nem befejezett gyártási kimenetek törlése" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Nem engedélyezett" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Gyártásban fel lett használva" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Foglalás felszabadítása a készre jelentés előtt" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Túlfoglalt készlet" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Hogyan kezeljük az gyártáshoz rendelt egyéb készletet" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Pár készlet tétel túl lett foglalva" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Kiosztatlanok elfogadása" -#: build/serializers.py:777 +#: build/serializers.py:775 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:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "A szükséges készlet nem lett teljesen lefoglalva" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" -#: build/serializers.py:795 +#: build/serializers.py:793 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:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Szükséges gyártási mennyiség nem lett elérve" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "A Gyártásnak nyitott leszármazott Gyártása van" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "A Gyártásnak folyamatban kell lennie" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Gyártás sor" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Gyártás kimenet" -#: build/serializers.py:879 +#: build/serializers.py:877 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:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Gyártás sor tétel" -#: build/serializers.py:928 +#: build/serializers.py:926 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:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Rendelkezésre álló mennyiség ({q}) túllépve" -#: build/serializers.py:993 +#: build/serializers.py:991 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:1001 +#: build/serializers.py:999 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:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "A lefoglalandó tételeket meg kell adni" -#: build/serializers.py:1089 +#: build/serializers.py:1087 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:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Hely kizárása" -#: build/serializers.py:1099 +#: build/serializers.py:1097 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:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Felcserélhető készlet" -#: build/serializers.py:1105 +#: build/serializers.py:1103 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:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Készlet helyettesítés" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Helyettesítő alkatrészek foglalásának engedélyezése" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Opcionális tételek" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Opcionális tételek lefoglalása a gyártáshoz" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" -msgstr "" +msgstr "Összes elem" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" -msgstr "" +msgstr "Nem követett tételek" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "Követett tételek" #: build/serializers.py:1125 -msgid "Tracked Items" -msgstr "" - -#: build/serializers.py:1127 msgid "Item Type" -msgstr "" +msgstr "Tétel típusa" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" -msgstr "" +msgstr "Válasszon tétel típust az automatikus foglaláshoz" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Nem sikerült az automatikus lefoglalás feladatot elindítani" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Alkatrészjegyzék Hivatkozás" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "Alkatrészjegyzék Cikk Azonosító" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Alkatrészjegyzék Alkatrész Név" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" -msgstr "" +msgstr "Beépítés helye" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Gyártás" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Beszállítói alkatrész" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Lefoglalt mennyiség" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Gyártási Hivatkozás" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Alkatrész kategória Neve" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Követésre kötelezett" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Örökölt" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Változatok" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Gyártásban" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Gyártás Ütemezve" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Külső raktárkészlet" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Elérhető készlet" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Elérhető Helyettesítő Készlet" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Elérhető Készlet Változatokból" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Felhasznált mennyiség meghaladja a lefoglalt mennyiséget" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Megjegyzés a készletfelhasználáshoz" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "Gyártási tételnek a megfelelő gyártási rendelésre kell mutatnia" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Dupla gyártási tétel lefoglalás" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "Gyártási sornak a megfelelő gyártási rendelésre kell mutatnia" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Duplikált gyártási sor foglalás" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Legalább egy tétel vagy sor megadása kötelező" @@ -1496,43 +1495,43 @@ msgstr "Felfüggesztve" msgid "Cancelled" msgstr "Törölve" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Kész" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "A gyártási utasításhoz készlet szükséges" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "A {build} gyártási rendelésnek további készletre van szüksége" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Késésben lévő gyártás" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "A {bo} gyártás most már késésben van" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "Ez egy hivatkozás" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "Ez egy állomány" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "A felhasználó nem jogosult ezen mellékletek törlésére" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "A felhasználó nem jogosult ezen melléklet törlésére" @@ -1556,794 +1555,794 @@ msgstr "Nincsen plugin" msgid "Project Code Label" msgstr "Projekt kód címke" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Frissítve" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Legutóbbi frissítés időpontja" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "Frissítette" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "Az objektumot utoljára módosította" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Egyedi projektszám" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Projekt leírása" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "A projektért felelős felhasználó vagy csoport" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Beállítási kulcs" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Beállítás értéke" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "A kiválasztott érték nem egy érvényes lehetőség" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Az érték bináris kell legyen" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Az érték egész szám kell legyen" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Az értéknek számnak kell lennie" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "Az érték nem felel meg az ellenőrzéseknek" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Kulcs string egyedi kell legyen" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Felhasználó" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Ár" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Egységár egy meghatározott mennyiség esetén" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Végpont" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Végpont ahol ez a webhook érkezik" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Webhook neve" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktív" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Aktív-e ez a webhook" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token a hozzáféréshez" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Titok" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Megosztott titok a HMAC-hoz" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "Üzenet azonosító" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Egyedi azonosító ehhez az üzenethez" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Kiszolgáló" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Kiszolgáló ahonnan ez az üzenet érkezett" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Fejléc" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Üzenet fejléce" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Törzs" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Üzenet törzse" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Végpont amin ez az üzenet érkezett" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Dolgozott rajta" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Befejeződött a munka ezzel az üzenettel?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Azonosító" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Cím" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Közzétéve" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Szerző" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Összefoglaló" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Elolvasva" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Elolvasva?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Képfájl" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "A képhez tartozó model típus" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "A képhez tartozó model azonosító" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Egyedi mértékegység" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "A mértékegység szimbólumának egyedinek kell lennie" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "A mértékegységnek valós azonosítónak kell lennie" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Egység neve" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Szimbólum" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Opcionális mértékegység szimbólum" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definíció" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Mértékegység definíció" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Melléklet" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Hiányzó fájl" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Hiányzó külső link" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Modell típusa" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "Képhez tartozó model típus" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Válaszd ki a mellekelni kívánt fájlt" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Megjegyzés" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Melléklet megjegyzés" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Feltöltés dátuma" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "A fájl feltöltésének dátuma" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Fájl mérete" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Fájlméret bájtban" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "A melléklet model típusa érvénytelen" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Egyedi Állapot" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Egyedi Állapotok" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Hivatkozott Állapot Készlet" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Az az Állapot készlet, melyet ez az egyedi állapot kibővít" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logikai kulcs" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "Az állapot logikai kulcsa amely megegyezik az üzleti logika egyedi állapotával" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Érték" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "A model adatbázisba tárolandó szám" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Az állapot neve" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Címke" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "A felületen megjelenített címke" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Szín" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "A felöleten megjelenő szín" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Model" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "A Model amihez ez az állapot tartozik" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Modelt választani kötelező" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "Kulcsot választani kötelező" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "Logikai kulcsot választani kötelező" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "A kulcs és a logikai kulcs nem lehet azonos" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Helyes hivatkozási állapot osztályt kell megadni" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "A kulcsnak eltérőnek kell lennie a hivatkozott állapotok logikai kulcsaitól" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "A logikai kulcsnak szerepelnie kell a hivatkozott állapotok logikai kulcsai közt" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "A Névnek el kell térnie a referencia állapotok neveitől" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Választéklista" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Választéklisták" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Választéklista neve" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Választéklista leírása" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Lezárt" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Választéklista lezárva?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Választéklista használható?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Forrás plugin" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Választéklista szolgáltató plugin" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Forrás szöveg" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Elhagyható lista forrás azonosító szöveg" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Alapértelmezett bejegyzés" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Alapértelmezett elem ezen a listán" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Létrehozva" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Választéklista létrehozási dátuma és ideje" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Utoljára módosítva" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "A választéklista utolsó módosításának dátuma és ideje" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Választéklista bejegyzés" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Választéklista bejegyzések" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Választéklista amihez ez a bejegyzés tartozik" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Választéklista bejegyzés értéke" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Választéklista bejegyzés felirata" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Választéklista bejegyzés leírása" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "Választéklista bejegyzés aktív?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Paraméter sablon" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "Paraméter Sablonok" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Jelölőnégyzet paraméternek nem lehet mértékegysége" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Jelölőnégyzet paraméternek nem lehetnek választási lehetőségei" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "A lehetőségek egyediek kell legyenek" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "A paraméter sablon nevének egyedinek kell lennie" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "Célmodell típusa ehhez a paramétersablonhoz" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Paraméter neve" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Mértékegység" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Paraméter mértékegysége" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Paraméter leírása" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Jelölőnégyzet" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Ez a paraméter egy jelölőnégyzet?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Lehetőségek" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Választható lehetőségek (vesszővel elválasztva)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "A paraméter választéklistája" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Engedélyezve" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "Ez a paramétersablon engedélyezett?" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "Paraméter" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "Paraméterek" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Hibás választás a paraméterre" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "Érvénytelen modelltípus megadva a paraméterhez" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "Modell ID" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "A célmodell azonosítója ehhez a paraméterhez" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Sablon" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "Paraméter sablon" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Adat" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Paraméter értéke" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Megjegyzés" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Opcionális megjegyzés mező" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Vonalkód beolvasás" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Vonalkód adat" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Melyik felhasználó olvasta be a vonalkódot" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Időbélyeg" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Vonalkód beolvasás dátuma és ideje" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "Vonalkód feldolgozó URL végpont" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Kontextus" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Vonalkód olvasás kontextus adat" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Válasz" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Vonalkód olvasó válasz adat" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Eredmény" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "Vonalkód olvasás sikeres volt?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "Hiba történt" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Email napló törlés védett. Állítsd be az INVENTREE_PROTECT_EMAIL_LOG-ot False-ra hogy engedélyezd a törlést." -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "E-mail üzenet" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "E-mail üzenetek" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "Bejelentve" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "Elküldve" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "Megbukott" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Kiszállítva" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Megerősítve" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "Bejövő" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "Kimenő" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Nincs válasz" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "Kiszállítás követése" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "Olvasási visszaigazolás" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "Kattintások nyomkövetése" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "Globális ID" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "Üzenet azonosítója (külső rendszertől származhat)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "Szál ID" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Üzenet-sor azonosító (külső rendszerből származhat)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "Szál" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "Ehhez az üzenethez kapcsolódó üzenet-lánc" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "Prioritás" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "Email szál" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "Email szálak" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Kulcs" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "Az üzenetlánc egyedi azonosítója (az üzenetlánc azonosítására szolgál)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "Üzenetlánc egyedi azonosítója" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "Belső kezdés" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "Ez az üzenetlánc belül indult?" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "Az üzenetlánc kezdeti dátuma és ideje" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "Az üzenetlánc utolsó módosításának dátuma és ideje" @@ -2365,7 +2364,7 @@ msgstr "{verbose_name} megszakítva" msgid "A order that is assigned to you was canceled" msgstr "Egy hozzád rendelt megrendelés megszakítva" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Készlet érkezett" @@ -2379,11 +2378,11 @@ msgstr "Készlet érkezett vissza egy visszavétel miatt" #: common/serializers.py:125 msgid "Indicates if changing this setting requires confirmation" -msgstr "" +msgstr "Jelzi, hogy a beállítás módosítása megerősítést igényel-e" #: common/serializers.py:139 msgid "This setting requires confirmation before changing. Please confirm the change." -msgstr "" +msgstr "Ez a beállítás módosítás előtt megerősítést igényel. Kérjük, erősítse meg a változtatást." #: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" @@ -2393,1235 +2392,1243 @@ msgstr "Ez a beállítás felül van bírálva egy környezeti változó által" msgid "Override" msgstr "Felülbírálás" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Folyamatban" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Folyamatban lévő feladatok" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Ütemezett Feladatok" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Hibás feladatok" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "Feladat ID" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Egyedi feladat ID" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Zárol" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Zárolási idő" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Feladat neve" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Funkció" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Funkció neve" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Paraméterek" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Feladat paraméterei" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Kulcsszó paraméterek" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Feladat kulcsszó paraméterek" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Fájlnév" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Modell típusa" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "A felhasználónak nincs joga létrehozni vagy módosítani ehhez a modelhez tartozó mellékleteket" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "A felhasználónak nincs jogosultsága paraméterek létrehozására vagy szerkesztésére ehhez a modellhez" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Választéklista lezárva" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Nincs csoport" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "A site URL blokkolva van a konfigurációban" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Újraindítás szükséges" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Egy olyan beállítás megváltozott ami a kiszolgáló újraindítását igényli" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Függőben levő migrációk" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Függőben levő adatbázis migrációk" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Aktív figyelmeztető kódok" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Aktív figyelmeztető kódok dict-je" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "Példány azonosító" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Az InvenTree példány egyedi azonosítója" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Bejelentési ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Azonosítsa-e magát az szerver a példányazonosítóval a szerver állapotban (authentikáció nélkül)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Kiszolgáló példány neve" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "String leíró a kiszolgáló példányhoz" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Példány név használata" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Példány név használata a címsorban" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Verzió infók megjelenítésének tiltása" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Verzió infók megjelenítése csak admin felhasználóknak" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Cég neve" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Belső cégnév" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Kiindulási URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Kiindulási URL a kiszolgáló példányhoz" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Alapértelmezett pénznem" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Válassz alap pénznemet az ár számításokhoz" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Támogatott valuták" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Támogatott valuták listája" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Árfolyam frissítési gyakoriság" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Milyen gyakran frissítse az árfolyamokat (nulla a kikapcsoláshoz)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "nap" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Árfolyam frissítő plugin" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Kiválasztott árfolyam frissítő plugin" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Letöltés URL-ről" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Képek és fájlok letöltésének engedélyezése külső URL-ről" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Letöltési méret korlát" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Maximum megengedett letöltési mérete a távoli képeknek" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "Felhasznált User-agent az URL-ről letöltéshez" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "A külső URL-ről letöltéshez használt user-agent felülbírálásának engedélyezése (hagyd üresen az alapértelmezéshez)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Erős URL validáció" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Sablon specifikáció igénylése az URL validálásnál" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Frissítés keresés gyakorisága" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Milyen gyakran ellenőrizze van-e új frissítés (0=soha)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Automatikus biztonsági mentés" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Adatbázis és média fájlok automatikus biztonsági mentése" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Automata biztonsági mentés gyakorisága" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Hány naponta készüljön automatikus biztonsági mentés" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Feladat törlési gyakoriság" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Háttérfolyamat eredmények törlése megadott nap eltelte után" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Hibanapló törlési gyakoriság" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Hibanapló bejegyzések törlése megadott nap eltelte után" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Értesítés törlési gyakoriság" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Felhasználói értesítések törlése megadott nap eltelte után" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "Email törlési gyakoriság" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "Email üzenetek törlése megadott nap eltelte után" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "Email napló védett" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "Megakadályozza az email napló bejegyzések törlését" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Vonalkód támogatás" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Vonalkód olvasó támogatás engedélyezése a web felületen" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Vonalkód olvasás eredmények tárolása" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Vonalkód olvasási eredmények tárolása az adatbázisban" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Maximálisan tárolt vonalkód olvasások mennyisége" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Maximálisan tárolt vonalkód olvasások száma" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Vonalkód beadási késleltetés" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Vonalkód beadáskor a feldolgozás késleltetési ideje" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Webkamerás vonalkód olvasás" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Webkamerás kódolvasás engedélyezése a böngészőből" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Vonalkód Adat Megjelenítése" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Vonalkód adat megjelenítése a böngészőben szövegként" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Vonalkód Generáló Plugin" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Belső vonalkód generálásra használatos plugin" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Alkatrész változatok" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Alkatrész változat vagy verziószám tulajdonság használata" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "Csak Összeállítás Verzió" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "Csak összeállított alkatrészeknek lehessen verziója" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Lehessen törölni az Összeállításból" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Lehessen olyan alkatrészt törölni ami Összeállításban szerepel" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "IPN reguláris kifejezés" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguláris kifejezés ami illeszkedik az alkatrész IPN-re" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Többször is előforduló IPN engedélyezése" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Azonos IPN használható legyen több alkatrészre is" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "IPN szerkesztésének engedélyezése" -#: common/setting/system.py:435 +#: common/setting/system.py:436 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/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Alkatrészjegyzék adatok másolása" -#: common/setting/system.py:441 +#: common/setting/system.py:442 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/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Alkatrész paraméterek másolása" -#: common/setting/system.py:447 +#: common/setting/system.py:448 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/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Alkatrész teszt adatok másolása" -#: common/setting/system.py:453 +#: common/setting/system.py:454 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/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Kategória paraméter sablonok másolása" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Kategória paraméter sablonok másolása alkatrész létrehozásakor" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Alkatrészek alapból sablon alkatrészek legyenek" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Alkatrészeket alapból lehessen gyártani másik alkatrészekből" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Összetevő" -#: common/setting/system.py:477 +#: common/setting/system.py:478 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/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Beszerezhető" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Alkatrészek alapból beszerezhetők legyenek" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Értékesíthető" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Alkatrészek alapból eladhatók legyenek" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Alkatrészek alapból követésre kötelezettek legyenek" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtuális" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Alkatrészek alapból virtuálisak legyenek" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Kapcsolódó alkatrészek megjelenítése" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Alkatrész kapcsolódó alkatrészeinek megjelenítése" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Kezdeti készlet adatok" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Kezdeti készlet létrehozása új alkatrész felvételekor" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Kezdeti beszállítói adatok" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Kezdeti beszállítói adatok létrehozása új alkatrész felvételekor" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Alkatrész név megjelenítés formátuma" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Formátum az alkatrész név megjelenítéséhez" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Alkatrész kategória alapértelmezett ikon" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Alkatrész kategória alapértelmezett ikon (üres ha nincs)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek min. száma" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Tizedejegyek minimális száma az árak megjelenítésekor" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek max. száma" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Tizedejegyek maximális száma az árak megjelenítésekor" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Beszállítói árazás használata" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Beszállítói ársávok megjelenítése az általános árkalkulációkban" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Beszerzési előzmények felülbírálása" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Beszerzési árelőzmények felülírják a beszállítói ársávokat" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Készlet tétel ár használata" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "A kézzel bevitt készlet tétel árak használata az árszámításokhoz" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Készlet tétel ár kora" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Az ennyi napnál régebbi készlet tételek kizárása az árszámításból" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Alkatrészváltozat árak használata" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Alkatrészváltozat árak megjelenítése az általános árkalkulációkban" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Csak az aktív változatokat" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Csak az aktív alkatrészváltozatok használata az árazásban" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "Árazás automatikus frissítése" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "Alkatrész árazás automatikus frissítése belső adat változáskor" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Árazás újraszámítás gyakoriság" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Árak automatikus frissítése ennyi nap után" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Belső árak" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Alkatrészekhez belső ár engedélyezése" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Belső ár felülbírálása" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Ha elérhetőek az árkalkulációkban a belső árak lesznek alapul véve" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "Nulla mennyiség engedélyezése az anyagjegyzékben" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Címke nyomtatás engedélyezése" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Címke nyomtatás engedélyezése a web felületről" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "Címke kép DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 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/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Riportok engedélyezése" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Riportok előállításának engedélyezése" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Debug mód" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Riportok előállítása HTML formátumban (hibakereséshez)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Jelentési hibák naplózása" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Jelentések generálása közben jelentkező hibák naplózása" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Lapméret" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Alapértelmezett lapméret a PDF riportokhoz" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Csak választható mértékegységek" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "A megadott mértékegység csak a beállított lehetőségekből legyen elfogadva" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Globálisan egyedi sorozatszámok" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "A sorozatszámoknak egyedinek kell lennie a teljes készletre vonatkozóan" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Kimerült készlet törlése" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Alapértelmezett művelet mikor a készlet tétel elfogy" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Batch kód sablon" -#: common/setting/system.py:700 +#: common/setting/system.py:709 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/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Készlet lejárata" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Készlet lejárat kezelésének engedélyezése" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Lejárt készlet értékesítése" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Lejárt készlet értékesítésének engedélyezése" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Álló készlet ideje" -#: common/setting/system.py:718 +#: common/setting/system.py:727 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/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Lejárt készlet gyártása" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Gyártás engedélyezése lejárt készletből" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Készlet tulajdonosok kezelése" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Tulajdonosok kezelésének engedélyezése a készlet helyekre és tételekre" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Hely alapértelmezett ikon" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Hely alapértelmezett ikon (üres ha nincs)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Beépített készlet megjelenítése" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Beépített készlet tételek megjelenítése a készlet táblákban" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Tételek telepítésekor a darabjegyzék ellenőrzése" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "A beépített tételeknek a szülő elem darabjegyzékében szerepelniük kell" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Lehet Hiányzó Készletet Mozgatni" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Lehet-e olyan készleteket mozgatni készlethelyek között amik nincsenek raktáron" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Gyártási utasítás azonosító minta" -#: common/setting/system.py:766 +#: common/setting/system.py:775 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/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Felelős tulajdonos szükséges" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Minden rendeléshez felelőst kell rendelni" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Szükséges Aktív Alkatrész" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Inaktív alkatrészekre nem lehet Gyártási Rendelést létrehozni" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Elvárás a Lezárt Alkatrész" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Megakadályozza, hogy nem lezárt alkatrészekre gyártási rendelést lehessen indítani" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "Jóváhagyott Alkatrészjegyzék Kötelező" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Megakadályozza gyártási rendelés készítését ha nincsen az Alkatrészjegyzék jóváhagyva" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "Leszármazott Gyártásoknak Lezártnak Kell Lennie" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Amíg minden leszármazott gyártás le nincsen zárva nem lehet a szülő gyártást lezárni" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "Külső Gyártási Rendelések" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "Engedélyezze a külső gyártási rendelés funkciót" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Blokkolás a tesztek sikeres végrehajtásáig" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Nem lehet gyártási tételt befejezni amíg valamennyi kötelező teszt sikeres nem lett" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Visszavétel engedélyezése" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Visszavételek engedélyezése a felületen" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Visszavétel azonosító minta" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Szükséges minta a visszavétel azonosító mező előállításához" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Befejezett visszavétel szerkesztése" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Visszavétel szerkesztésének engedélyezése befejezés után" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Vevői rendelés azonosító minta" -#: common/setting/system.py:846 +#: common/setting/system.py:855 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/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Vevői rendeléshez alapértelmezett szállítmány" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Szállítmány automatikus létrehozása az új vevő rendelésekhez" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Befejezett vevői rendelés szerkesztése" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Vevői rendelések szerkesztésének engedélyezése szállítás vagy befejezés után" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "Szállítmány Ellenőrzést Igényel" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "Megakadályozza a szállítmányok befejezését, amíg a tételeket nem ellenőrizték" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Leszállított Rendelések Készre jelölése" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Leszállítottnak jelölt Értékesítési rendelések automatikusan Kész-re lesznek állítva, a \"Leszállított\" állapot átugrásával" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Beszerzési rendelés azonosító minta" -#: common/setting/system.py:889 +#: common/setting/system.py:898 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/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Befejezett beszerzési rendelés szerkesztése" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Beszérzési rendelések szerkesztésének engedélyezése kiküldés vagy befejezés után" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Jelenlegi pénznem" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "Tétel érték bázis-pénznemre váltása készlet beérkezéskor" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Beszerzési rendelések automatikus befejezése" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "A beszerzési rendelés automatikus befejezése ha minden sortétel beérkezett" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Elfelejtett jelszó engedélyezése" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Elfelejtett jelszó funkció engedélyezése a bejentkező oldalon" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Regisztráció engedélyezése" -#: common/setting/system.py:931 +#: common/setting/system.py:940 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/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "SSO engedélyezése" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "SSO engedélyezése a bejelentkező oldalon" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "SSO regisztráció engedélyezése" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Felhaszálók önkéntes regisztrációjának engedélyezése SSO-n keresztül a bejelentkező oldalon" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "SSO csoport szinkronizálás engedélyezése" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Az InvenTree csoportok szinkronizálása a hitelesítésszolgáltatóhoz" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "SSO csoport kulcs" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "A csoportkérés tulajdonság neve amit a hitelesítésszolgáltató nyújt" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "SSO csoport hozzárendelés" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Az SSO csoportok hozzárendelése az InvenTree csoportokhoz. Ha a helyi csoport nem létezik, létre lesz hozva." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Az SSO-n kívüli csoportok eltávolítása" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Ha egy felhasználóhoz rendelt csoport nem létezik az azonosításszolgáltatóban azt eltávolítsuk el. Ennek a kikapcsolása biztonsági problémákhoz vezethet" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Email szükséges" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Kötelező email megadás regisztrációkor" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "SSO felhasználók automatikus kitöltése" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Felhasználó adatainak automatikus kitöltése az SSO fiókadatokból" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Email kétszer" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 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/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Jelszó kétszer" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Regisztráláskor kétszer kérdezze a felhasználó jelszavát" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Engedélyezett domainek" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Feliratkozás korlátozása megadott domain-ekre (vesszővel elválasztva, @-al kezdve)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Csoport regisztráláskor" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Ehhez a csoporthoz lesznek az új felhasználók rendelve. Ha az SSO csoport szinkronizálás engedélyezve van, akkor ez a csoport csak akkor lesz hozzárendelve a felhasználóhoz ha az azonosítás szolgáltató semmilyen csoportot nem rendelt hozzá." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Többfaktoros hitelesítés kényszerítése" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "A felhasználóknak többfaktoros hitelesítést kell használniuk." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Pluginok ellenőrzése indításkor" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Ellenőrizze induláskor hogy minden plugin telepítve van - engedélyezd konténer környezetben (docker)" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Plugin frissítések ellenőrzése" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Frissítések periódikus ellenőrzésének engedélyezése a telepített pluginokra" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "URL integráció engedélyezése" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "URL útvonalalak hozzáadásának engedélyezése a pluginok számára" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Navigációs integráció engedélyezése" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Navigációs integráció engedélyezése a pluginok számára" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "App integráció engedélyezése" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "App hozzáadásának engedélyezése a pluginok számára" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Ütemezés integráció engedélyezése" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 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/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Esemény integráció engedélyezése" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Belső eseményekre reagálás engedélyezése a pluginok számára" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Interfész integráció engedélyezése" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Pluginok felhasználói felületbe épülésének engedélyezése" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "Email integráció engedélyezése" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Pluginok bejövő/kimenő levelekhez hozzáférésének engedélyezése" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "Projektszámok engedélyezése" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Projectek nyomkövetéséhez projekt kódok engedélyezése" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "A készletek korábbi mennyiségének és értékének naplózásának engedélyezés" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Külső helyek nélkül" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Automatikus leltár időpontja" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" -msgstr "" +msgstr "Készlettörténet törlési gyakoriság" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Felhasználók teljes nevének megjelenítése" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Felhasználói név helyett a felhasználók teljes neve jelenik meg" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "Felhasználói profilok megjelenítése" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "Felhasználói profilok megjelenítése a profil oldalukon" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Teszt állomás adatok engedélyezése" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Tesztállomás adatok gyűjtésének teszt eredménybe gyűjtésének engedélyezése" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "Gép Ping Engedélyezése" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Időszakos ping feladat engedélyezése a regisztrált gépekhez az állapotuk ellenőrzésére" @@ -3966,346 +3973,346 @@ msgstr "Az alkatrész aktív" msgid "Manufacturer is Active" msgstr "A Gyártó Aktív" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "A Szállítói Alkatrész Aktív" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "A saját alkatrész Aktív" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "A Beszállító Aktív" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Gyártó" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Cég" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Van készleten" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Cégek" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Cég leírása" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "A cég leírása" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Weboldal" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Cég weboldala" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Telefonszám" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kapcsolattartó telefonszáma" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Kapcsolattartó email címe" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Névjegy" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Kapcsolattartó" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link a külső céginformációhoz" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Ez a vállalat aktív?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Vevő" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Értékesítesz alkatrészeket ennek a cégnek?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Beszállító" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Vásárolsz alkatrészeket ettől a cégtől?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Gyártó" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Gyárt ez a cég alkatrészeket?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Cég által használt alapértelmezett pénznem" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "Adószám" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "Céges adószám" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Cím" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Címek" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Cég kiválasztása" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Cím megnevezése" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Címhez tartozó leírás, megnevezés" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Elsődleges cím" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Beállítás elsődleges címként" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "1. sor" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Cím első sora" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "2. sor" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Cím második sora" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Irányítószám" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Város/Régió" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Irányítószám város/régió" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Állam/Megye" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Állam vagy megye" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Ország" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Cím országa" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Megjegyzés a futárnak" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Futárnak szóló megjegyzések" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Belső szállítási megjegyzések" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Szállítási megjegyzések belső használatra" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link a címinformációkhoz (külső)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Gyártói alkatrész" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Kiindulási alkatrész" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Válassz alkatrészt" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Gyártó kiválasztása" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN (Gyártói cikkszám)" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Gyártói cikkszám" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL link a gyártói alkatrészhez" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Gyártói alkatrész leírása" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "A csomagolási egységnek kompatibilisnek kell lennie az alkatrész mértékegységgel" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Csomagolási mennyiségnek nullánál többnek kell lennie" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Kapcsolódó gyártói alkatrésznek ugyanarra a kiindulási alkatrészre kell hivatkoznia" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Beszállító" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Beszállító kiválasztása" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Beszállítói cikkszám" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Ez a szállítói termék aktív?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" -msgstr "" +msgstr "Elsődleges" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Gyártói alkatrész kiválasztása" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL link a beszállítói alkatrészhez" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Beszállítói alkatrész leírása" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "alap költség" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Csomagolás" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Alkatrész csomagolás" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Csomagolási mennyiség" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Egy csomagban kiszállítható mennyiség, hagyd üresen az egyedi tételeknél." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "többszörös" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Többszörös rendelés" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Beszállítónál elérhető mennyiség" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Elérhetőség frissítve" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Utolsó elérhetőségi adat frissítés" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Beszállítói Ár Kedvezmény" @@ -4317,7 +4324,7 @@ msgstr "Beszállító által használt alapértelmezett pénznem" msgid "Company Name" msgstr "Cégnév" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Készleten" @@ -4453,7 +4460,7 @@ msgstr "A mező nem létezik a cél adatszerkezetben" msgid "Selected field is read-only" msgstr "Kijelölt mező csak olvasható" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Importálási művelet" @@ -4465,31 +4472,31 @@ msgstr "Mező" msgid "Column" msgstr "Oszlop" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Sor száma" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Eredeti sor adat" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Hibák" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Érvényes" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "ID-ra van szükség meglévő rekord frissítéshez." -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Nem található rekord a megadott ID-vel" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Érvénytelen az ID formátuma" @@ -4589,7 +4596,7 @@ msgstr "Címkénkénti nyomtatandó mennyiség" msgid "Connected" msgstr "Csatlakoztatba" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Ismeretlen" @@ -4717,105 +4724,117 @@ msgstr "Maximális Előrehaladás" msgid "Maximum value for progress type, required if type=progress" msgstr "Maximális érték az előrehaladás típushoz, kötelező ha típus=előrehaladás" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Rendelés azonosítója" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Kintlévő" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Van projektszáma" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Készítette" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Ez előtt létrehozva" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Létrehozva ez után" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "Van kezdeti dátum" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "Kezdeti dátum ez előtt" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "Kezdeti dátum ez után" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "Van céldátum" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Céldátum ez előtt" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Céldátum ez után" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Van árazás" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Ez előtt befejezve" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Befejezve ez után" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "Külső Gyártási Rendelés" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Rendelés" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "A rendelés teljesítve" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Belső alkatrész" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "A rendelés függőben" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Kész" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Van kiszállítás" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Beszerzési rendelés" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4823,8 +4842,8 @@ msgstr "Beszerzési rendelés" msgid "Sales Order" msgstr "Vevői rendelés" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4840,11 +4859,11 @@ msgstr "Teljes ár" msgid "Total price for this order" msgstr "A rendelés teljes ára" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Rendelés pénzneme" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Megrendeléshez használt pénznem (hagyd üresen a cégnél alapértelmezetthez)" @@ -4852,718 +4871,742 @@ msgstr "Megrendeléshez használt pénznem (hagyd üresen a cégnél alapértelm msgid "This order is locked and cannot be modified" msgstr "Egy a rendelés le van zárva és nem lehet módosítani" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "A kapcsolattartó nem egyezik a kiválasztott céggel" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "A kezdeti dátumnak meg kell előznie a céldátumot" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "A cím nem egyezik a kiválasztott vállalattal" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Rendelés leírása (opcionális)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Válassz projektszámot ehhez a rendeléshez" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Link külső weboldalra" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Kezdés dátuma" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "A tervezett kezdeti dátum ehhez a gyártáshoz" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cél dátum" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Várt teljesítési dátuma a megrendelésnek. Ezután már késésben lévőnek számít majd." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Kiállítás dátuma" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Kiállítás dátuma" #: order/models.py:506 +msgid "Updated At" +msgstr "Frissítve" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Felhasználó vagy csoport aki felelőse ennek a rendelésnek" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Kapcsolattartó ehhez a rendeléshez" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Cég címei ehhez a rendeléshez" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Rendelés azonosító" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Állapot" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Beszerzési rendelés állapota" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Cég akitől a tételek beszerzésre kerülnek" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Beszállítói azonosító" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Beszállítói rendelés azonosító kód" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "érkeztette" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Rendelés teljesítési dátuma" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Cél" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Beérkezett tételek tárolója" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Az alkatrész beszállítója meg kell egyezzen a beszerzési rendelés beszállítójával" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Sortétel nem egyezik a beszerzési megrendeléssel" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Sortételen hiányzik a kapcsolódó alkatrész" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Mennyiség pozitív kell legyen" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Vevő" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Cég akinek a tételek értékesítésre kerülnek" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Értékesítési rendelés állapot" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Vevői azonosító " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Megrendelés azonosító kódja a vevőnél" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Kiszállítás dátuma" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "szállította" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "Rendelés már teljesítve" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "Rendelés már visszavonva" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Csak nyitott rendelés jelölhető késznek" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "A rendelés nem jelölhető késznek mivel függő szállítmányok vannak" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "A rendelést nem lehet befejezni mert hiányos foglalások vannak" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "A rendelés nem jelölhető késznek mivel nem teljesített sortételek vannak" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "A rendelés le van zárva és nem lehet módosítani" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Tétel mennyiség" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Sortétel azonosító" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Sortétel megjegyzései" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Cél dátuma ennek a sortételnek (hagyd üresen a rendelés céldátum használatához)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Sortétel leírása (opcionális)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "További kontextus ehhez a sorhoz" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Egységár" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "Vevői Rendelés Sortétel" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "Beszállítói alkatrésznek egyeznie kell a beszállítóval" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "Gyártási rendelést külsőnek kell jelölni" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "Gyártási rendeléseket csak összeszerelhető alkatrészekhez lehet kapcsolni" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "Gyártási rendelés alkatrészének meg kell egyeznie a sortétel alkatrésszel" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Beszállítói alkatrész" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Beérkezett" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Érkezett tételek száma" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Beszerzési ár" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Beszerzési egységár" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "Külső gyártási rendelés amit ez a sortétel teljesít" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "Vevői Rendelés Extra Sor" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "Vevői Rendelés Sortétel" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Csak értékesíthető alkatrészeket lehet vevői rendeléshez adni" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Eladási ár" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Eladási egységár" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Kiszállítva" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Szállított mennyiség" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "Vevői Rendelés Szállítása" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "A szállítási címnek egyeznie kell az ügyféllel" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "Szállítási cím ehhez a szállítmányhoz" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Szállítás dátuma" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Szállítási dátum" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Kézbesítés dátuma" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Ellenőrizte" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Szállítmány" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Szállítmány száma" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Nyomkövetési szám" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Szállítmány nyomkövetési információ" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Számlaszám" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Hozzátartozó számla referencia száma" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Szállítmány már elküldve" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Szállítmány nem tartalmaz foglalt készlet tételeket" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "A szállítmányt ellenőrizni kell, mielőtt befejezhetné" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "Vevői Rendelés Extra Sor" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "Vevői rendeléshez foglalások" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "Készlet tétel nincs hozzárendelve" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Nem foglalható készlet egy másik fajta alkatrész sortételéhez" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Nem foglalható készlet egy olyan sorhoz amiben nincs alkatrész" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 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" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Vevői rendelés nem egyezik a szállítmánnyal" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Szállítmány nem egyezik a vevői rendeléssel" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Sor" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Vevői rendelés szállítmány azonosító" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Tétel" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Válaszd ki a foglalásra szánt készlet tételt" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Visszavétel azonosító" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Cég akitől a tételek visszavételre kerülnek" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Visszavétel állapota" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "Visszavétel sortétel" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "Készlettételt meg kell adni" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "Visszavétel mennyisége meghaladja a készletet" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "Visszavétel mennyisége nullánál nagyobb kell, hogy legyen" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "Érvénytelen mennyiség szerializált készlettételnél" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Válaszd ki a vevőtől visszavenni kívánt tételt" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Visszavétel dátuma" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Kimenetel" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Sortétel végső kimenetele" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Sortétel visszaküldésének vagy javításának költsége" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "Visszavétel extra tétel" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "Rendelés azonosító" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "A duplikálandó megrendelés száma" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Sorok másolása" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Sortételek másolása az eredeti rendelésről" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Extra sorok másolása" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Az eredeti rendelés extra tételeinek másolása" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Paraméterek másolása" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Sortételek" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Kész sorok" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Rendelés duplikálása" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Rendelés másolás beállításai" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Érvénytelen rendelés ID" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Beszállító neve" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 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:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "A rendelésben teljesítetlen sortételek vannak" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "A rendelés nem nyitott" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Automata árazás" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Beszerzési ár automatikus számítása a beszállítói alkatrész adatai alapján" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Beszérzési ár pénzneme" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Elemek összevonása" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Azonos forrás és cél dátumú Alkatrész tételeinek összevonása egy tételre" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "SKU (leltári azonosító)" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Belső cikkszám" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Belső cikkszám" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Beszállítói alkatrészt meg kell adni" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Beszerzési rendelést meg kell adni" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "A beszállítónak egyeznie kell a beszerzési rendelésben lévővel" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "A beszerzési rendelésnek egyeznie kell a beszállítóval" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Sortétel" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Válassz cél helyet a beérkezett tételeknek" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Írd be a batch kódját a beérkezett tételeknek" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Lejárati dátum" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "Írd be a beérkező készlet tételek lejárati dátumát" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Írd be a sorozatszámokat a beérkezett tételekhez" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "Bejövő készlettételek csomagolási információjának felülbírálata" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "Kiegészítő megjegyzés beérkező készlettételekhez" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Vonalkód" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Beolvasott vonalkód" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Ez a vonalkód már használva van" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Szállítások" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Kész szállítmányok" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Foglalt tételek" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Sortétel nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "Szállítmány kiszállítva" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "Szállítmány nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Nincs találat a következő sorozatszámokra" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Az alábbi sorozatszámok nem elérhetők" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Visszavétel sortétel" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Sortétel nem egyezik a visszavétellel" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "A sortétel már beérkezett" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Csak folyamatban lévő megrendelés tételeit lehet bevételezni" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "Visszaküldési mennyiség" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Sortétel pénzneme" @@ -5599,146 +5642,146 @@ msgstr "Visszatérítés" msgid "Reject" msgstr "Elutasított" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Késésben lévő beszerzés" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "A {po} beszerzési rendelés most már késésben van" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Késésben lévő vevői rendelés" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "A {so} vevői rendelés most már késésben van" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Lejárt visszvételi utasítás" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "A {ro} Visszavételi utasítás már lejárt" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Csillagozott" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Csillagozottra szűrés" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Mélység" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Kategória mélységre szűrés" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Felső szint" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Csúcs készlethelyre szűrés" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Lépcsőzetes" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Szűrt eredmények tartalmazzák az alkategóriákat" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Szülő" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Szülő kategóriára szűrés" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Az adott kategória alkategóriáinak kihagyása" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Van találat" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Változat-e" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Változat" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Vannak Változatok" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Alkatrészjegyzék ellenőrizve" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Kaszkád Kategóriák" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Ha igaz, tartalmazza az adott kategória alkategóriáiban lévő tételeket" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Szűrés numerikus kategória azonosító vagy a 'null' literál szerint" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Összeállított Alkatrész ellenőrizhető" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "Összetevő alkatrész ellenőrizhető" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Használ" @@ -5751,7 +5794,7 @@ msgstr "Alkatrész kategória" msgid "Part Categories" msgstr "Alkatrész kategóriák" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Alapértelmezett hely" @@ -5779,7 +5822,7 @@ msgstr "Ebben a kategóriában évő alkatrészek kulcsszavai alapban" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (opcionális)" @@ -5800,7 +5843,7 @@ msgstr "Alapértelmezett érték" msgid "Default Parameter Value" msgstr "Alapértelmezett paraméter érték" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Alkatrészek" @@ -5844,981 +5887,978 @@ msgid "Part cannot be a revision of itself" msgstr "Alkatrész nem lehes saját magának verziója" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "Nem lehet olyan alkatrészből új verziót csinálni ami már eleve egy verzió" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "Verzió kódot meg kell adni" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "Verziók csak összeállított alkatrészeknél engedélyezettek" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "Nem lehet sablon alkatrészből új verziót csinálni" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "A szülő alkatrésznek azonos sablonra kell mutatnia" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Létezik már készlet tétel ilyen a sorozatszámmal" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "Azonos IPN nem engedélyezett az alkatrészekre, már létezik ilyen" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "Adott alkatrész verzióból már létezik egy." -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Ilyen nevű, IPN-ű és reviziójú alkatrész már létezik." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Szerkezeti kategóriákhoz nem lehet alkatrészeket rendelni!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Alkatrész neve" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Sablon-e" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Ez egy sablon alkatrész?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Ez az alkatrész egy másik változata?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Ebből a sablonból" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Alkatrész leírása (opcionális)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Kulcsszavak" -#: part/models.py:1139 +#: part/models.py:1133 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:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Belső Cikkszám)" -#: part/models.py:1164 +#: part/models.py:1158 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:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Változat" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "Ez egy másik alkatrész egy verziója?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Ennek a verziója" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Alapban hol tároljuk ezt az alkatrészt?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Alapértelmezett lejárat" -#: part/models.py:1229 +#: part/models.py:1223 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:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimális készlet" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Minimálisan megengedett készlet mennyiség" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Alkatrész mértékegysége" -#: part/models.py:1254 +#: part/models.py:1248 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:1260 +#: part/models.py:1254 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:1266 +#: part/models.py:1260 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:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "Lehet ehhez az alkatrészhez több ellenőrzési eredményt rögzíteni?" -#: part/models.py:1278 +#: part/models.py:1272 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:1284 +#: part/models.py:1278 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:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Aktív-e ez az alkatrész?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Lezárt alkatrészt nem lehet szerkeszteni" -#: part/models.py:1300 +#: part/models.py:1294 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:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "Alkatrészjegyzék ellenőrizve" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "Az alkatrész anyagjegyzéke érvényes?" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Tárolt alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "Alkatrészjegyzéket ellenőrizte" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Alkatrészjegyzék ellenőrzési dátuma" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Létrehozó" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Alkatrész felelőse" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Több értékesítése" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Árszámítások gyorstárazásához használt pénznem" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Minimum alkatrészjegyzék költség" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Összetevők minimum költsége" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Maximum alkatrészjegyzék költség" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Összetevők maximum költsége" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Minimum beszerzési ár" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Eddigi minimum beszerzési költség" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Maximum beszerzési ár" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Eddigi maximum beszerzési költség" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Minimum belső ár" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Minimum költség a belső ársávok alapján" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Maximum belső ár" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Maximum költség a belső ársávok alapján" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Minimum beszállítói ár" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Minimum alkatrész ár a beszállítóktól" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Maximum beszállítói ár" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Maximum alkatrész ár a beszállítóktól" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Minimum alkatrészváltozat ár" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Alkatrészváltozatok számolt minimum költsége" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Maximum alkatrészváltozat ár" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Alkatrészváltozatok számolt maximum költsége" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Minimum költség" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Minimum költség felülbírálása" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Maximum költség" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Maximum költség felülbírálása" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Számított általános minimum költség" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Számított általános maximum költség" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Minimum eladási ár" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Minimum eladási ár az ársávok alapján" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Maximum eladási ár" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Maximum eladási ár az ársávok alapján" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Minimum eladási költség" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Eddigi minimum eladási ár" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Maximum eladási költség" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Eddigi maximum eladási ár" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Leltározható alkatrész" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Tételszám" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Egyedi készlet tételek száma a leltárkor" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Teljes készlet a leltárkor" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Dátum" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Leltározva ekkor" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Minimum készlet érték" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Becsült minimum raktárkészlet érték" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Maximum készlet érték" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Becsült maximum raktárkészlet érték" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "Alkatrész értékesítési ársáv" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "Alkatrész Teszt Sablon" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Hibás sablon név - legalább egy alfanumerikus karakter kötelező" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Teszt sablont csak ellenőrizhetőre beállított alkatrészhez lehet csinálni" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "Már létezik ilyen azonosítójú Teszt sablon ehhez az alkatrészhez" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Teszt név" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Add meg a teszt nevét" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "Teszt azonosító" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "Egyszerűsített Teszt azonosító" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Teszt leírása" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Adj hozzá egy leírást ehhez a teszthez" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "Teszt engedélyezve?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Kötelező" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Kötelező érték" -#: part/models.py:3746 +#: part/models.py:3741 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:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Kötelező melléklet" -#: part/models.py:3753 +#: part/models.py:3748 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:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "Választható lehetőségek ehhez a Teszthez (vesszővel elválasztva)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "Alkatrészjegyzék nem szerkeszthető mert az összeállítás le van zárva" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Alkatrészjegyzék nem szerkeszthető mert az összeállítás változat le van zárva" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Szülő alkatrész kiválasztása" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Al alkatrész" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Ez az alkatrészjegyzék tétel opcionális" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ez az alkatrészjegyzék tétel fogyóeszköz (készlete nincs követve a gyártásban)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "Beállítás mennyiség" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "A gyártáshoz szükséges extra mennyiség, a beállási veszteséggel együtt" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "Veszteség" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Becsült veszteség egy gyártásnál, százalékban kifejezve (0-100)" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "Kerekítési többszörös" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "A szükséges termelési mennyiség az érték legközelebbi többszöröséhez kerekítése" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Alkatrészjegyzék tétel azonosító" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Alkatrészjegyzék tétel megjegyzései" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Ellenőrző összeg" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Alkatrészjegyzék sor ellenőrző összeg" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Jóváhagyva" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Ez a BOM tétel jóvá lett hagyva" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Öröklődött" -#: part/models.py:4072 +#: part/models.py:4067 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:4078 +#: part/models.py:4073 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:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 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:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Al alkatrészt kötelező megadni" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Alkatrészjegyzék tétel helyettesítő" -#: part/models.py:4369 +#: part/models.py:4364 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:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Szülő alkatrészjegyzék tétel" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Helyettesítő alkatrész" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "1.rész" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "2.rész" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Válassz kapcsolódó alkatrészt" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Kapcsolati megjegyzés" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Alkatrész kapcsolat nem hozható létre önmagával" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Szülő Kategória" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Felsőbb szintű alkatrész kategória" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Alkategóriák" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Eredmények" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Eszerint a sablon szerint rögzített eredmények száma" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Beszerzési pénzneme ennek a készlet tételnek" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "A fájl nem kép" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Eredeti alkatrész" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Válassz eredeti alkatrészt a másoláshoz" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kép másolása" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Kép másolása az eredeti alkatrészről" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Alkatrészjegyzék másolása" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Paraméterek másolása" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Paraméterek másolása az eredeti alkatrészről" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Megjegyzések másolása" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Megjegyzések másolása az eredeti alkatrészről" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Teszt másolása" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Teszt sablonok másolása az eredeti alkatrészről" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Add meg a kezdeti készlet mennyiséget. Ha nulla akkor nem lesz készlet létrehozva." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Válassz beszállítót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategória neve" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Gyártásban" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Az alkatrészből jelenleg ennyi van gyártás alatt" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Már beütemezett de még nem kész gyártási mennyiség" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Készlet tételek" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "Verziók" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Teljes készlet" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Nem lefoglalt készlet" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Variánsok Raktárkészlet" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Alkatrész másolása" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kategória paraméterek másolása" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Paraméter sablonok másolása a kiválasztott alkatrész kategóriából" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Meglévő kép" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "A meglévő alkatrész képfájl neve" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "A képfájl nem létezik" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Teljes alkatrészjegyzék jóváhagyása" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Gyártható" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Gyártásokhoz szükséges" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Gyártási rendelésekhez foglalva" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Értékesítési rendeléshez szükséges" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Értékesítési rendeléshez lefoglalva" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minimum ár" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Számított minimum ár felülbírálása" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Minimum ár pénzneme" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Maximum ár" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Számított maximum ár felülbírálása" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Maximum ár pénzneme" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Megadott pénznem átváltása {default_currency}-re sikertelen" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Szülő összeállítás kiválasztása" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Összetevő alkatrész kijelölése" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Meglévő alkatrészjegyzék tételek törlése a másolás előtt" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Sablon alkatrészektől örökölt alkatrészjegyzék tételek használata" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Helyettesítő alkatrészek másolása az alkatrészjegyzék tételek másolásakor" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Alacsony készlet értesítés" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "A {part.name} alkatrész rendelkezésre álló készlete a megadott minimum alá csökkent" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Álló készlet értesítés" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "1 készlet tétel közelít a lejárati idejéhez" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "{item_count} készlet tétel közelít a lejáratához" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Nincs lejárati dátuma" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "{abs(days_diff)} napja lejárt" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Ma jár le" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} nap" @@ -7581,64 +7621,77 @@ msgstr "TME vonalkódok támogatása" msgid "The Supplier which acts as 'TME'" msgstr "A 'TME' beszállító" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Csak a személyzeti felhasználók adminisztrálhatják a pluginokat" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Plugin telepítés letiltva" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin telepítése sikeres" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plugin telepítve ide: {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Ez a plugin nem található a tárolóban" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "A plugin nem egy csomagolt plugin" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Plugin csomag neve nem található" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Csak a személyzeti felhasználók adminisztrálhatják a pluginokat" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Plugin eltávolítás letiltva" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Plugin nem eltávolítható mivel még aktív" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "Kötelező plugint nem lehet uninstallálni" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "Plugin nem uninstallálható mert mintaplugin" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "Plugin nem uninstallálható mert beépített plugin" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Plugin nincs telepítve" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Plugin telepítés nem található" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Plugin eltávolítása sikeres" @@ -7690,21 +7743,21 @@ msgstr "Csomag plugin" msgid "Plugin" msgstr "Bővítmény" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nincs szerző" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "A '{p}' plugin nem kompatibilis az aktuális applikáció verzióval {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "A pluginhoz minimum {v} verzió kell" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "A pluginhoz maximum {v} verzió kell" @@ -7885,51 +7938,51 @@ msgstr "Tlepítés nincs megerősítve" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Teljes újratöltés" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "A plugin tárolók teljes újratöltése" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Kényszerített újratöltés" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Akkor is töltse újra a plugin tárolót ha már be lett töltve" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Pluginok begyűjtése" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Pluginok begyűjtése és a tárolóhoz adása" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Plugin aktiválása" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Plugin bekapcsolása" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Kötelező plugint nem lehet kikapcsolni" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Konfiguráció törlése" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Plugin konfiguráció törlése az adatbázisból" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "Melyik felhasználóra érvényes ez a beállítás" @@ -8191,7 +8244,7 @@ msgstr "Összesen" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Sorozatszám" @@ -8216,7 +8269,7 @@ msgstr "Készlet tétel teszt riport" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Beépített tételek" @@ -8249,184 +8302,196 @@ msgstr "Nincs eredmény (szükséges)" msgid "No result" msgstr "Nincs eredmény" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "A fájl nem létezik" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "A képfile nem található" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "part_image elem csak alkatrész példánynál használható" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image elem csak cég példánynál használható" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Hely mélységre szűrés" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Csúcs készlethelyre szűrés" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Szűrt eredmények tartalmazzák az alhelyeket" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Szülő hely" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Szülő helyre szűrés" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Alkatrész neve (kisbetű/nagybetű nem számít)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Az alkatrész neve tartalmazza (kisbetű/nagybetű nem számít)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Alkatrész neve (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Alkatrész IPN (kisbetű/nagybetű nem számít)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Alkatrész IPN tartalmazza (kisbetű/nagybetű nem számít)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Alkatrész IPN (regexp)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Minimális készlet" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Maximális készlet" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Státuszkód" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Külső hely" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Felhasználva Gyártási Rendelésben" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Más készlettételbe beépítve" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Alkatrész fa" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Módosítva ezelőtt" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Frissítve ez után" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Leltárazva ezelőtt" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Leltárazva ezután" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Lejárat előtt" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Lejárat után" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Állott" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Adj meg egy készlettétel azonosítót - PK-t - hogy a tétel és leszármazottai kihagyásához" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "Készlethelyek alábontása" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "Az al-készlethelyeket is beleértve" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Készlethely azonosító alapján szűrés vagy a 'null'-ra" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Mennyiség megadása kötelező" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Egy érvényes alkatrészt meg kell adni" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "A megadott beszállítói alkatrész nem létezik" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "A beszállítói alkatrészhez van megadva csomagolási mennyiség, de a use_pack_size flag nincs beállítva" -#: stock/api.py:1162 +#: stock/api.py:1165 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/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "Beépítettek Belefoglalása" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "Ha igaz, tartalmazza a megadott készlettétel alá beépített tételek teszteredményeit" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "Szűrés numerikus készlettétel azonosító szerint" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "A(z) {id} azonosítójú készlettétel nem létezik" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8442,7 +8507,7 @@ msgstr "Készlethely típusok" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Alapértelmezett ikon azokhoz a helyekhez, melyeknek nincs ikonja beállítva (válaszható)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Készlet hely" @@ -8450,11 +8515,11 @@ msgstr "Készlet hely" msgid "Stock Locations" msgstr "Készlethelyek" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Tulajdonos" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Tulajdonos kiválasztása" @@ -8482,274 +8547,274 @@ msgstr "Tárolóhely típus" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Nem lehet ezt a raktári helyet szerkezetivé tenni, mert már vannak itt tételek!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "a(z) {field} nem létezik" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Alkatrész kiválasztása kötelező" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "A szerkezeti raktári helyre nem lehet készletet felvenni!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Virtuális alkatrészből nem lehet készletet létrehozni" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "A beszállítói alkatrész típusa ('{self.supplier_part.part}') mindenképpen {self.part} kellene, hogy legyen" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 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:966 +#: stock/models.py:968 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:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "A tétel nem tartozhat saját magához" -#: stock/models.py:993 +#: stock/models.py:995 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:1006 +#: stock/models.py:1008 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:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Szülő készlet tétel" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Kiindulási alkatrész" -#: stock/models.py:1042 +#: stock/models.py:1044 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:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Hol található ez az alkatrész?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 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:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Beépítve ebbe" -#: stock/models.py:1073 +#: stock/models.py:1075 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:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Sorozatszám ehhez a tételhez" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Batch kód ehhez a készlet tételhez" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Készlet mennyiség" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Forrás gyártás" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Gyártás ehhez a készlet tételhez" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Felhasználva ebben" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Felhasználva ebben a gyártásban" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Forrás beszerzési rendelés" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Beszerzés ehhez a készlet tételhez" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Cél vevői rendelés" -#: stock/models.py:1167 +#: stock/models.py:1169 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:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Törlés ha kimerül" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Készlet tétel törlése ha kimerül" -#: stock/models.py:1207 +#: stock/models.py:1209 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:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Alkatrésszé alakítva" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "Mennyiség meghaladja az elérhető készletet" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Az alkatrész nem követésre kötelezett" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Mennyiség egész szám kell legyen" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "A mennyiség nem haladhatja meg az elérhető készletet ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Sorozatszámokat listában kell megadni" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "A mennyiség nem egyezik a megadott sorozatszámok számával" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "Nem lehet készletet strukturális helyre rendelni" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Ez a Teszt sablon nem létezik" -#: stock/models.py:2069 +#: stock/models.py:2071 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:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Készlet tétel beépül egy másikba" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "A készlet tétel más tételeket tartalmaz" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Készlet tétel gyártás alatt" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "A készlet tétel ugyanarra az alkatrészre kell vonatkozzon" -#: stock/models.py:2104 +#: stock/models.py:2106 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:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Készlet tételek állapotainak egyeznie kell" -#: stock/models.py:2409 +#: stock/models.py:2411 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:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Készlettörténet" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Bejegyzés megjegyzései" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Készlet Tétel Ellenőrzés Eredménye" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Ehhez a teszthez meg kell adni értéket" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Ehhez a teszthez fel kell tölteni mellékletet" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "A teszt eredménye érvénytelen" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Teszt eredménye" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Teszt kimeneti értéke" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Teszt eredmény melléklet" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Tesztek megjegyzései" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "Teszt állomás" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "A tesztet elvégző tesztállomás azonosítója" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "Elkezdődött" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "A teszt indításának időpontja" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "Befejezve" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "A teszt befejezésének időpontja" @@ -8793,246 +8858,246 @@ msgstr "Válassza ki az alkatrészt amihez sorozatszámot akar generálni" msgid "Quantity of serial numbers to generate" msgstr "Hány sorozatszámot generáljunk" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "Az eredmény Teszt sablonja" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "Ehhez az alkatrészhez nem tartozik ellenőrzés" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "Sablon azonosító vagy Teszt név szükséges" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "A tesztet nem lehet a kezdésnél hamarabb befejezni" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Szülő tétel" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "Szülő készlet tétel" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Csomagolási mennyiség használata: a megadott mennyiség ennyi csomag" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "Csomagméret használata" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Írd be a sorozatszámokat az új tételekhez" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Beszállítói Cikkszám" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Lejárt" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Gyermek tételek" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "Nyilvántartott tételek" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Készlet tétel beszerzési ára, per darab vagy csomag" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Add meg hány készlet tételt lássunk el sorozatszámmal" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "Nincsen készlettétel megadva" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "A mennyiség nem lépheti túl a rendelkezésre álló készletet ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Cél készlet hely" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Sorozatszámokat nem lehet hozzárendelni ehhez az alkatrészhez" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "A sorozatszámok már léteznek" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Válaszd ki a beépítésre szánt készlet tételt" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Beépítendő mennyiség" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Adja meg a beépítendő mennyiséget" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Tranzakció megjegyzés hozzáadása (opcionális)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "A beépítendő mennyiség legalább 1 legyen" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Készlet tétel nem elérhető" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "A kiválasztott alkatrész nincs az alkatrészjegyzékben" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "A beépítendő mennyiség nem haladhatja meg az elérhető mennyiséget" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Cél hely a kiszedett tételeknek" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Válassz alkatrészt amire konvertáljuk a készletet" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "A kiválasztott alkatrész nem megfelelő a konverzióhoz" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Készlet tétel hozzárendelt beszállítói alkatrésszel nem konvertálható" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Készlet tétel státusz kódja" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Válaszd ki a státuszváltásra szánt készlet tételeket" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Nincs készlet tétel kiválasztva" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Alhelyek" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "Felsőbb szintű készlet hely" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Az alkatrésznek értékesíthetőnek kell lennie" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "A tétel egy vevő rendeléshez foglalt" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "A tétel egy gyártási utasításhoz foglalt" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Vevő akihez rendeljük a készlet tételeket" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "A kiválasztott cég nem egy vevő" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Készlet hozzárendelés megjegyzései" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "A készlet tételek listáját meg kell adni" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Készlet összevonás megjegyzései" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Nem egyező beszállítók megengedése" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 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:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Nem egyező állapotok megjelenítése" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 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:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Legalább két készlet tételt meg kell adni" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Nincs változás" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Készlet tétel elsődleges kulcs értéke" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "Készlettétel nincs készleten" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "Készlettétel már készleten van" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "Mennyiség nem lehet negatív" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Készlet tranzakció megjegyzései" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "Meglévő készletbe olvasztás" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "Visszaérkezett tételek beolvasztása a készlettételekbe ha lehetséges" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "Következő sorozatszám" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "Előző Sorozatszám" @@ -9538,59 +9603,75 @@ msgstr "A felhasználó vezetékneve" msgid "Email address of the user" msgstr "A felhasználó e-mail címe" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Személyzet" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Van-e a felhasználónak személyzeti jogosultsága" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Rendszergazda" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "A felhasználó rendszergazda-e" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Aktív a felhasználói fiók" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "Csak rendszergazda szerkesztheti ezt a mezőt" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "Jelszó" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "Felhasználó jelszava" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "Figyelmezetés felülbírálása" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "A jelszó szabályok figyelmeztetésének felülbírálata" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "Nincs jogosultsága felhasználót létrehozni" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "A fiókod sikeresen létrejött." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Kérlek használd a jelszó visszállítás funkciót a belépéshez" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Üdvözlet az InvenTree-ben" diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po index 4aa801555e..6e1eb3d80d 100644 --- a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API endpoint tidak ditemukan" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Daftar item atau filter harus disediakan untuk Pekerjaan Banyak" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Barang harus disediakan sebagai daftar" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Pengguna tidak memiliki izin untuk melihat model ini" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Jumlah yang diberikan tidak valid" @@ -112,13 +104,13 @@ msgstr "Masukkan tanggal" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Catatan" @@ -131,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "Nilai yang diberikan tidak sesuai dengan pola yang ditentukan: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Nomor seri kosong" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Gandakan Nomor Seri" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Tidak ada nomor seri ditemukan" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Hapus tag-tag HTML dari nilai ini" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Koneksi Galat" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Ukuran gambar terlalu besar" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "URL yang diberikan bukan file gambar yang valid" @@ -207,11 +215,11 @@ msgstr "URL yang diberikan bukan file gambar yang valid" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Surel" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Anda harus mengaktifkan autentikasi dua faktor sebelum melakukan hal lainnya." @@ -259,18 +267,18 @@ msgstr "" msgid "Invalid choice" msgstr "Pilihan tidak valid" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nama" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Keterangan" msgid "Description (optional)" msgstr "Keterangan (opsional)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Direktori" @@ -313,75 +321,66 @@ msgstr "Hash unik data barcode" msgid "Existing barcode found" msgstr "Sudah ada barcode yang sama" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Terjadi Kesalahan Server" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Sebuah kesalahan telah dicatat oleh server." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Harus berupa angka yang valid" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Mata Uang" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Nilai tidak valid" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL file gambar external" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Unduhan gambar dari URL external tidak aktif" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "Bukan kode mata uang yang valid" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Produksi Induk" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "Bagian" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tersedia" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Order Produksi" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokasi" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Order Produksi" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Referensi Order Produksi" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Referensi Order Produksi" msgid "Reference" msgstr "Referensi" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Pilih bagian untuk diproduksi" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referensi Order Penjualan" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Lokasi Sumber" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Pilih dari lokasi mana stok akan diambil untuk produksi ini (kosongkan untuk mengambil stok dari mana pun)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Lokasi Tujuan" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Pilih lokasi di mana item selesai akan disimpan" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Jumlah Produksi" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Jumlah item stok yang akan dibuat" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Item selesai" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Jumlah stok item yang telah diselesaikan" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Status pembuatan" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Kode status pembuatan" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Kode Kelompok" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Kode kelompok untuk hasil produksi ini" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Tanggal Pembuatan" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Target tanggal selesai" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Target tanggal selesai produksi. Produksi akan menjadi terlambat setelah tanggal ini." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Tanggal selesai" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "diselesaikan oleh" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Diserahkan oleh" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Pengguna yang menyerahkan order ini" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Penanggung Jawab" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Tautan eksternal" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Tautan menuju URL eksternal" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Tidak ada hasil produksi yang ditentukan" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Hasil produksi sudah selesai" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Hasil produksi tidak sesuai dengan order produksi" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Jumlah" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item produksi harus menentukan hasil produksi karena bagian utama telah ditandai sebagai dapat dilacak" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Jumlah harus 1 untuk stok dengan nomor seri" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Item stok teralokasikan terlalu banyak" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Stok Item" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Sumber stok item" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Jumlah stok yang dialokasikan ke produksi" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Pasang ke" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Tujuan stok item" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Hasil Produksi" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Hasil produksi tidak sesuai dengan produksi induk" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Hasil bagian tidak sesuai dengan bagian dalam order produksi" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Hasil produksi ini sudah diselesaikan" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Hasil produksi tidak dialokasikan sepenuhnya" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Masukkan jumlah hasil pesanan" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Jumlah harus angka bulat karena terdapat bagian yang dapat dilacak dalam daftar barang" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Nomor Seri" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Masukkan nomor seri untuk hasil pesanan" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Alokasikan nomor seri secara otomatis" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Daftar hasil pesanan harus disediakan" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Lokasi hasil pesanan yang selesai" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Terima Alokasi Tidak Lengkap" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Tidak diizinkan" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Terima Tidak Teralokasikan" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Terima bahwa stok item tidak teralokasikan sepenuhnya ke pesanan ini" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Terima Tidak Selesai" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Terima bahwa jumlah hasil produksi yang diperlukan belum selesai" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Jumlah produksi yang diperlukan masih belum cukup" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Order memiliki hasil produksi yang belum dilengkapi" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Hasil produksi" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Hasil pesanan harus mengarah ke pesanan yang sama" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part harus mengarah ke bagian yang sesuai dengan order produksi" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Jumlah tersedia ({q}) terlampaui" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlacak" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Hasil produksi tidak dapat ditentukan untuk alokasi barang yang tidak terlacak" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Item yang dialokasikan harus disediakan" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lokasi stok, dari mana bahan/bagian akan diambilkan (kosongkan untuk mengambil dari lokasi mana pun)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Lokasi tidak termasuk" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Jangan ambil stok item dari lokasi yang dipilih" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Stok bergantian" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Item stok di beberapa lokasi dapat digunakan secara bergantian" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Stok pengganti" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Izinkan alokasi bagian pengganti" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "Dibatalkan" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Selesai" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Stok dibutuhkan untuk order produksi" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Pengguna" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Harga" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktif" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Judul" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Tautan" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Kesimpulan" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Berkas Gambar" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Lampiran" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "File tidak ditemukan" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Tautan eksternal tidak ditemukan" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Pilih file untuk dilampirkan" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Komentar" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Ukuran Berkas" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Label" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Model" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Terbuat" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Pilihan" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Aktif" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Respon" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Barang diterima" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Nama File" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nama Perusahaan" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "Hari" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponen" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Aktifkan Laporan" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Ukuran Halaman" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Surel diperlukan" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Aktifkan Integrasi Antarmuka" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Perusahaan" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Perusahaan" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Deskripsi Perusahaan" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Laman" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Nomor Ponsel" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontak alamat surel" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontak" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Kode Pos" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Tidak diketahui" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Selesai" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Total Harga" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Pelanggan" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Harga Jual" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Dikirim" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Jumlah yang dialokasikan harus lebih dari nol" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "Order ID" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Salin Baris" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "Tolak" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Tanggal" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Harga Minimal" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Harga Maksimal" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Perbarui" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Nomor Seri" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Lampiran perlu diunggah untuk tes ini" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "Nama belakang dari pengguna" msgid "Email address of the user" msgstr "Alamat surel dari pengguna" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Staf" - -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" + +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Selamat Datang di InvenTree" diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po index 5d5cf51e4c..ac4e26dc40 100644 --- a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "Endpoint API non trovato" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "L'elenco degli articoli o dei filtri devono essere forniti per le operazioni di massa" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Gli articoli devono essere forniti come elenco" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Lista elementi fornita non valida" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "I filtri devono essere forniti come dizionario" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Filtri forniti non validi" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Tutti i filtri devono essere usati solo con true" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Nessun elemento corrisponde ai criteri forniti" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Nessun dato fornito" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Questo campo deve essere unico." -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "L'utente non ha i permessi per vedere questo modello" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Impossibile convertire {original} in {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" @@ -112,13 +104,13 @@ msgstr "Inserisci la data" msgid "Invalid decimal value" msgstr "Valore decimale non valido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Note" @@ -131,75 +123,91 @@ msgstr "Il valore '{name}' non è nel formato del pattern" msgid "Provided value does not match required pattern: " msgstr "Il valore fornito non corrisponde al modello richiesto: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Impossibile serializzare più di 1000 elementi contemporaneamente" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Numero seriale vuoto" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Seriale Duplicato" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Gruppo non valido: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "L'intervallo di gruppo {group} supera la quantità consentita ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Nessun numero di serie trovato" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Il numero dei numeri seriali univoci ({n}) deve essere uguale alla quantità ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Rimuovi i tag HTML da questo valore" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "I dati contengono un contenuto in markdown proibito" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Errore di connessione" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Il server ha risposto con un codice di stato non valido" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Si è verificata un'eccezione" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Il server ha risposto con valore Content-Length non valido" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Immagine troppo grande" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Il download dell'immagine ha superato la dimensione massima" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Il server remoto ha restituito una risposta vuota" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "L'URL fornito non è un file immagine valido" @@ -207,11 +215,11 @@ msgstr "L'URL fornito non è un file immagine valido" msgid "Log in to the app" msgstr "Accedi all'app" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Devi abilitare l'autenticazione a due fattori prima di fare qualsiasi altra cosa." @@ -259,18 +267,18 @@ msgstr "Numero di riferimento troppo grande" msgid "Invalid choice" msgstr "Scelta non valida" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Descrizione" msgid "Description (optional)" msgstr "Descrizione (opzionale)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Percorso" @@ -313,75 +321,66 @@ msgstr "Codice univoco del codice a barre" msgid "Existing barcode found" msgstr "Trovato codice a barre esistente" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Fallimento Attività" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Attività di lavoro in background '{f}' fallita dopo {n} tentativi" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Errore del server" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Un errore è stato loggato dal server." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Immagine" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Deve essere un numero valido" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Selezionare la valuta dalle opzioni disponibili" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "Questo campo non può essere nullo." -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Valore non valido" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Immagine Remota" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL del file immagine remota" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Il download delle immagini da URL remoto non è abilitato" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Impossibile scaricare l'immagine dall'URL remoto" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "Formato tipo di contenuto non valido" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "Tipo di Contenuto non trovato" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "Il tipo di contenuto non corrisponde alla classe mixin richiesta" @@ -537,11 +536,11 @@ msgstr "Cinese (Semplificato)" msgid "Chinese (Traditional)" msgstr "Cinese (Tradizionale)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Aggiornamento disponibile" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "È disponibile un aggiornamento per InvenTree" @@ -553,30 +552,30 @@ msgstr "Unità fisica non valida" msgid "Not a valid currency code" msgstr "Non è un codice valuta valido" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Stato dell'ordine" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Produzione Genitore" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Includi Varianti" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Includi Varianti" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Includi Varianti" msgid "Part" msgstr "Articolo" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categoria" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Produzione Antenata" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Assegnato a me" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Assegnato a" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Creato prima" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Creato dopo" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Ha data d'inizio" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Data d'inizio prima" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Data d'inizio dopo" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Ha data di fine" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Data obiettivo prima" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Data obiettivo dopo" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Completato prima" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Completato dopo" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Data minima" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Data massima" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Escludi Albero" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "La produzione deve essere annullata prima di poter essere eliminata" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Opzionale" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Assemblaggio" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Monitorato" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Testabile" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Ordine In Corso" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Allocato" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Utilizzato" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponibile" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Ordinato" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordine di Produzione" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Posizione" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Output" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filtra per ID articolo stock di output. Usa 'null' per trovare elementi di produzione disinstallati." @@ -748,41 +751,41 @@ msgstr "Filtra per ID articolo stock di output. Usa 'null' per trovare elementi msgid "Build Orders" msgstr "Ordini di Produzione" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Assembly BOM non è stato convalidato" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "L'ordine di generazione non può essere creato per una parte inattiva" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "L'ordine di compilazione non può essere creato per una parte sbloccata" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Gli ordini di costruzione possono essere eseguiti solo esternamente per gli articoli acquistabili" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "L'utente o il gruppo responsabile deve essere specificato" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "L'ordine di costruzione della parte non può essere cambiata" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "La data di scadenza deve essere successiva alla data d'inizio" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Riferimento Ordine Di Produzione" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Riferimento Ordine Di Produzione" msgid "Reference" msgstr "Riferimento" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Breve descrizione della build (facoltativo)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "Ordine di produzione a cui questa produzione viene assegnata" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Selezionare parte da produrre" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Numero di riferimento ordine di vendita" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "Ordine di vendita a cui questa produzione viene assegnata" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Posizione Di Origine" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleziona la posizione da cui prelevare la giacenza (lasciare vuoto per prelevare da qualsiasi posizione di magazzino)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Build Esterno" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Questo ordine di produzione è eseguito esternamente" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Posizione Della Destinazione" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Seleziona il luogo in cui gli articoli completati saranno immagazzinati" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Quantità Produzione" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Numero di articoli da costruire" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Articoli completati" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Numero di articoli di magazzino che sono stati completati" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Stato Produzione" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Codice stato di produzione" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Codice Lotto" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Codice del lotto per questa produzione" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Data di creazione" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Data inizio produzione" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Data d'inizio programmata per questo ordine di produzione" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Data completamento obiettivo" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data di completamento della produzione. Dopo tale data la produzione sarà in ritardo." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Data di completamento" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "Completato da" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Rilasciato da" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Utente che ha emesso questo ordine di costruzione" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsabile" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Utente o gruppo responsabile di questo ordine di produzione" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Collegamento esterno" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link a URL esterno" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Priorità di produzione" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Priorità di questo ordine di produzione" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Codice del progetto" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Codice del progetto per questo ordine di produzione" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Impossibile finalizzare l'ordine di produzione con ordini secondari aperti" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Impossibile finalizzare l'ordine di produzione con articolo incompleti" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Impossibile scaricare l'attività per completare le allocazioni di build" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "L'ordine di produzione {build} è stato completato" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "L'ordine di produzione è stato completato" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Deve essere fornita un numero di serie per gli articoli rintracciabili" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nessun output di produzione specificato" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "La produzione è stata completata" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "L'output della produzione non corrisponde all'ordine di compilazione" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantità non può essere maggiore della quantità in uscita" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "La produzione non ha superati tutti i test richiesti" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "L'output della build {serial} non ha superato tutti i test richiesti" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Impossibile completare parzialmente un build output con gli elementi assegnati" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Elemento di Riga Ordine di Produzione" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Crea oggetto" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Crea oggetto" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Quantità" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Quantità richiesta per l'ordine di costruzione" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Quantità di articoli magazzino consumate" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "L'elemento di compilazione deve specificare un output poiché la parte principale è contrassegnata come rintracciabile" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "La quantità assegnata deve essere maggiore di zero" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "La quantità deve essere 1 per lo stock serializzato" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantità assegnata ({q}) non deve essere maggiore della quantità disponibile ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Articoli in magazzino" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Quantità di magazzino da assegnare per la produzione" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Installa in" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Livello Produzione" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nome Articolo" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Genera Output" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "L'output generato non corrisponde alla produzione principale" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "L'output non corrisponde alle parti dell'ordine di produzione" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Questa produzione è stata già completata" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Questo output non è stato completamente assegnato" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Quantità totale richiesta per articoli rintracciabili" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantità totale richiesta, poiché la fattura dei materiali contiene articoli rintracciabili" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Codice Seriale" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Inserisci i numeri di serie per gli output di compilazione (build option)" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Posizione dello stock per l'output della produzione" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Numeri di Serie Assegnazione automatica" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "I seguenti numeri di serie sono già esistenti o non sono validi" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Deve essere fornito un elenco dei risultati di produzione" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Posizione dello stock per l'output di produzione rimosso" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Scarta Assegnazioni" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Scartare tutte le assegnazioni di magazzino per gli output rimossi" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Motivo dell'eliminazione degli output di compilazione" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Accetta Assegnazione Incompleta" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completa l'output se le scorte non sono state interamente assegnate" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consuma Giacenze Allocate" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consuma tutte le scorte che sono già state assegnate a questa produzione" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Rimuovi Output Incompleti" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Elimina gli output di produzione che non sono stati completati" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Non permesso" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Accetta come consumato da questo ordine di produzione" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Non assegnare prima di aver completato questo ordine di produzione" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Giacenza in eccesso assegnata" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Come si desidera gestire gli elementi extra giacenza assegnati all'ordine di produzione" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Alcuni articoli di magazzino sono stati assegnati in eccedenza" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Accetta Non Assegnato" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accetta che gli elementi in giacenza non sono stati completamente assegnati a questo ordine di produzione" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "La giacenza richiesta non è stata completamente assegnata" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Accetta Incompleta" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accetta che il numero richiesto di output di produzione non sia stato completato" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "L'ordine di costruzione ha ancora degli ordini di costruzione figli" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "L'ordine di costruzione deve essere in stato di produzione" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "L'ordine di produzione ha output incompleti" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linea di produzione" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Genera Output" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "L'output di produzione deve puntare alla stessa produzione" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Articolo linea di produzione" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "gli elementi degli articoli della distinta base devono puntare alla stessa parte dell'ordine di produzione" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "L'output di produzione deve essere specificato per l'ubicazione delle parti tracciate" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "L'output di produzione non deve essere specificato per l'ubicazione delle parti non tracciate" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Posizione dello stock in cui le parti devono prelevate (lasciare vuoto per prelevare da qualsiasi luogo)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Escludi Ubicazione" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Escludi gli elementi stock da questa ubicazione selezionata" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Scorte Intercambiabili" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Gli elementi in magazzino in più sedi possono essere utilizzati in modo intercambiabile" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Sostituisci Giacenze" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Consenti l'allocazione delle parti sostitutive" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Articoli Opzionali" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Assegna gli elementi opzionali della distinta base all'ordine di produzione" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Impossibile avviare l'attività di auto-allocazione" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Riferimento BOM" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "Identificativo dell'Articolo BOM" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nome Articolo BOM" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Costruzione" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Articolo Fornitore" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Quantità assegnata" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Riferimento Ordine Di Costruzione" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Nome Categoria Articolo" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Tracciabile" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Ereditato" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "In Produzione" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Pianificato per la produzione" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Scorte esterne" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Disponibilità in magazzino" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Disponibili scorte alternative" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Disponibili varianti delle scorte" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantità consumata supera la quantità assegnata" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Note facoltative per il consumo di magazzino" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "L'articolo prodotto deve puntare all'ordine di produzione corretto" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Duplica l'allocazione degli articoli da produrre" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "La riga di produzione deve puntare all'ordine di produzione corretto" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Duplica l'allocazione della riga di produzione" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Deve essere fornita almeno un articolo o riga" @@ -1495,43 +1494,43 @@ msgstr "In Attesa" msgid "Cancelled" msgstr "Annullato" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Completo" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Giacenza richiesta per l'ordine di produzione" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "L'ordine di produzione {build} richiede articoli aggiuntivi" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Ordine di produzione in ritardo" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "L'ordine di produzione {bo} è in ritardo" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "È Un Connegamento" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "E' un file" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "L'utente non ha il permesso di eliminare questi allegati" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "L'utente non ha il permesso di eliminare questo allegato" @@ -1555,794 +1554,794 @@ msgstr "Nessun plugin" msgid "Project Code Label" msgstr "Etichetta Codice Progetto" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Aggiornato" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Orario dell'ultimo aggiornamento" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "Aggiornato da" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "Utente che per ultimo ha aggiornato questo oggetto" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Codice unico del progetto" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Descrizione del progetto" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Utente o gruppo responsabile di questo progetto" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Tasto impostazioni" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Valore impostazioni" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Il valore specificato non è un opzione valida" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Il valore deve essere un valore booleano" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Il valore deve essere un intero" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Il valore deve essere un numero valido" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "Il valore non supera i controlli di convalida" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "La stringa chiave deve essere univoca" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Utente" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Quantità prezzo limite" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Prezzo" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Prezzo unitario in quantità specificata" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Scadenza" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Scadenza in cui questa notifica viene ricevuta" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Nome per questa notifica" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Attivo" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "È questa notifica attiva" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token per l'accesso" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Segreto" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Segreto condiviso per HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "ID Messaggio" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Identificatore unico per questo messaggio" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Host" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Host da cui questo messaggio è stato ricevuto" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Intestazione" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Intestazione di questo messaggio" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Contenuto" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Contenuto di questo messaggio" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Scadenza in cui questo messaggio è stato ricevuto" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Lavorato il" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Il lavoro su questo messaggio è terminato?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Id" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Titolo" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Collegamento" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Pubblicato" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Autore" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Riepilogo" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Letto" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Queste notizie sull'elemento sono state lette?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "File immagine" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "Tipo di modello di destinazione per questa immagine" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "ID modello di destinazione per questa immagine" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Unità Personalizzata" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Il simbolo dell'unità deve essere univoco" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Il nome dell'unità deve essere un identificatore valido" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Nome dell'unità" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Simbolo" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Simbolo unità opzionale" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definizione" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Definizione unità" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Allegato" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "File mancante" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Link esterno mancante" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Tipo modello" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "Tipo di modello di destinazione per l'immagine" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Seleziona file da allegare" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Commento" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Commento allegato" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Data caricamento" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Data di caricamento del file" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Dimensione file" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Dimensioni file in byte" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Tipo di modello specificato per l'allegato non valido" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Stato Personalizzato" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Stati Personalizzati" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Imposta Stato Di Riferimento" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Set di stato esteso con questo stato personalizzato" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Chiave Logica" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "Chiave logica dello stato che è uguale a questo stato personalizzato nella logica commerciale" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valore" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "Valore numerico che verrà salvato nel database dei modelli" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Nome dello Stato" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Etichetta" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Etichetta che verrà visualizzata nel frontend" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Colore" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Colore che verrà visualizzato nel frontend" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Modello" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "Modello a cui questo stato è associato" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Il modello deve essere selezionato" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "La chiave deve essere selezionata" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "La chiave logica deve essere selezionata" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "La chiave deve essere diversa dalla chiave logica" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Deve essere fornita una classe di stato di riferimento valida" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "La chiave deve essere diversa dalle chiavi logiche dello stato di riferimento" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "La chiave logica deve essere nelle chiavi logiche dello stato di riferimento" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "Il nome deve essere diverso dai nomi dello stato di riferimento" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Elenco Selezioni" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Elenchi di Selezione" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Nome dell'elenco di selezione" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Descrizione della lista di selezione" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Bloccato" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Questa lista di selezione è bloccata?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Questo elenco di selezione può essere utilizzato?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Plugin Sorgente" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Plugin che fornisce l'elenco di selezione" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Stringa Sorgente" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Stringa opzionale che identifica il sorgente usato per questa lista" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Voce Predefinita" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Voce predefinita per questo elenco di selezione" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Creato" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Data e ora in cui è stato creato l'elenco di selezione" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Ultimo aggiornamento" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Data e ora in cui l'elenco di selezione è stato aggiornato" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Voce Lista Selezione" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Voci Lista Selezione" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Elenco di selezione a cui appartiene questa voce" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Valore della voce della lista di selezione" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Etichetta per la voce elenco di selezione" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Descrizione della voce della lista di selezione" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "Questa voce della lista di selezione è attiva?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Modello Parametro" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "Modelli parametro" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "I parametri della casella di controllo non possono avere unità" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "I parametri della casella di controllo non possono avere scelte" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Le scelte devono essere uniche" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Il nome del modello del parametro deve essere univoco" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "Tipo di modello di destinazione per questo modello di parametro" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Nome Parametro" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Unità" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Unità fisiche per questo parametro" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Descrizione del parametro" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Casella di spunta" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Questo parametro è una casella di spunta?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Scelte" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Scelte valide per questo parametro (separato da virgola)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "Lista di selezione per questo parametro" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Abilitato" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "Questo modello di parametro è abilitato?" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "Parametro" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "Parametri" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Scelta non valida per il valore del parametro" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "Tipo di modello specificato per parametro non valido" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "ID Modello" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "ID del modello di destinazione per questo parametro" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Modello" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "Modello Parametro" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Dati" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Valore del Parametro" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Nota" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Note opzionali elemento" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Scansione Codice A Barre" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Dati del Codice a Barre" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Utente che ha scannerizzato il codice a barre" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Data e ora" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Data e ora della scansione del codice a barre" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "Endpoint URL che ha elaborato il codice a barre" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Contesto" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Dati contestuali per la scansione del codice a barre" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Risposta" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Dati di risposta dalla scansione del codice a barre" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Risultato" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "La scansione del codice a barre è riuscita?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "Si è verificato un errore" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: La cancellazione del log email è protetta. Imposta INVENTREE_PROTECT_EMAIL_LOG a Falso per consentire la cancellazione." -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "Messaggio email" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "Messaggi email" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "Annunciato" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "Inviato" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "Fallito" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Consegnato" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Confermato" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "Ricevuti" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "In uscita" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Nessuna risposta" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "Traccia La Consegna" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "Conferma di lettura" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "Tracciare i clic delle email" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "ID Globale" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificatore per questo messaggio (potrebbe essere fornito da un sistema esterno)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "ID discussione" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificatore per questo thread del messaggio (potrebbe essere fornito da un sistema esterno)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "Discussione" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "Thread collegato a questo messaggio" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "Priorità" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "Discussione Email" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "Discussioni Email" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chiave" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "Chiave univoca per questa discussione (usata per identificare la discussione)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "Identificatore univoco per questa discussione" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "Avviato internamente" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "Questa discussione è iniziata internamente?" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "Data e ora in cui la discussione è stata creata" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "Data e ora in cui la discussione è stata aggiornata" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} cancellato" msgid "A order that is assigned to you was canceled" msgstr "Un ordine assegnato a te è stato annullato" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Elemento ricevuto" @@ -2392,1235 +2391,1243 @@ msgstr "Indica se l'impostazione è sovrascritta da una variabile ambiente" msgid "Override" msgstr "Sovrascrivi" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "In Esecuzione" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Attività in sospeso" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Attività pianificate" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Attività Fallite" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID Attività" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ID attività univoco" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Blocco" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Tempo di blocco" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Nome attività" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Funzione" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Nome della funzione" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argomenti" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argomenti attività" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argomenti Parole Chiave" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argomenti parole chiave attività" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Nome del file" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Tipo di modello" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "L'utente non ha il permesso di creare o modificare allegati per questo modello" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "L'utente non ha il permesso di creare o modificare parametri per questo modello" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista di selezione bloccata" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Nessun gruppo" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "L'URL del sito è bloccato dalla configurazione" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Riavvio richiesto" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "È stata modificata un'impostazione che richiede un riavvio del server" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migrazioni in sospeso" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Numero di migrazioni del database in sospeso" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Codici di avviso attivi" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Un dizionario di codici di avviso attivi" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID istanza" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Identificatore unico per questa istanza InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Annuncio ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Annuncia l'ID dell'istanza del server nelle informazioni sullo stato del server (non autenticato)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nome Istanza Del Server" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Descrittore stringa per l'istanza del server" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Utilizza nome istanza" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Usa il nome dell'istanza nella barra del titolo" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Limita visualizzazione `Informazioni`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Mostra la modalità `Informazioni` solo ai superusers" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nome azienda" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Nome interno dell'azienda" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "URL Base" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "URL di base per l'istanza del server" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Valuta predefinita" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Selezionare la valuta di base per i calcoli dei prezzi" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Valute Supportate" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Elenco dei codici valuta supportati" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Intervallo Aggiornamento Valuta" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Quanto spesso aggiornare i tassi di cambio (impostare a zero per disabilitare)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "giorni" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Plugin di aggiornamento della valuta" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Plugin di aggiornamento valuta da usare" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Scarica dall'URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Consenti il download di immagini e file remoti da URL esterno" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Limite Dimensione Download" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Dimensione massima consentita per il download dell'immagine remota" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "User-agent utilizzato per scaricare dall'URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Consenti di sovrascrivere l'user-agent utilizzato per scaricare immagini e file da URL esterno (lasciare vuoto per il predefinito)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Convalida URL rigoroso" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Richiede specifico schema quando si convalidano gli URL" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Aggiorna intervallo di controllo" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Quanto spesso controllare gli aggiornamenti (impostare a zero per disabilitare)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Backup automatico" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Abilita il backup automatico di database e file multimediali" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Intervallo Di Backup Automatico" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Definisci i giorni intercorrenti tra un backup automatico e l'altro" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Intervallo Eliminazione Attività" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "I risultati delle attività in background verranno eliminati dopo un determinato numero di giorni" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Intervallo Di Cancellazione Registro Errori" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "I log di errore verranno eliminati dopo il numero specificato di giorni" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Intervallo Di Cancellazione Notifica" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Le notifiche dell'utente verranno eliminate dopo il numero di giorni specificato" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "Intervallo Eliminazione Email" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "I messaggi e-mail verranno eliminati dopo il numero specificato di giorni" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "Proteggi Log Email" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "Impedisci l'eliminazione delle voci di log email" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Supporto Codice A Barre" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Abilita il supporto per lo scanner di codice a barre nell'interfaccia web" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Memorizza Risultati Barcode" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Memorizza i risultati della scansione del codice a barre nel database" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Numero Massimo Scansioni Barcode" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Numero massimo di risultati della scansione del codice a barre da memorizzare" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Codice a barre inserito scaduto" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Tempo di ritardo di elaborazione codice a barre" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Codice a Barre Supporto Webcam" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Consenti la scansione del codice a barre tramite webcam nel browser" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Visualizza dati codice a barre" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Visualizza i dati del codice a barre nel browser come testo" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Plugin Generazione Codice A Barre" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Plugin da usare per la generazione interna di codice a barre" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Revisioni Articolo" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Abilita il campo revisione per l'articolo" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "Solo revisione assemblaggio" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "Consenti revisioni solo per articoli di assemblaggio" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Consenti l'eliminazione dall'assemblaggio" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permetti l'eliminazione degli articoli che sono usati in un assemblaggio" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Schema di espressione regolare per l'articolo corrispondente IPN" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Consenti duplicati IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Permetti a più articoli di condividere lo stesso IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Permetti modifiche al part number interno (IPN)" -#: common/setting/system.py:435 +#: common/setting/system.py:436 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/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Copia I Dati Della distinta base dell'articolo" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Copia i dati della Distinta Base predefinita quando duplichi un articolo" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Copia I Dati Parametro dell'articolo" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Copia i dati dei parametri di default quando si duplica un articolo" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Copia I Dati dell'Articolo Test" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Copia i dati di prova di default quando si duplica un articolo" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Copia Template Parametri Categoria" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Copia i modelli dei parametri categoria quando si crea un articolo" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Gli articoli sono modelli per impostazione predefinita" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Componente" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Gli articoli possono essere assemblati da altri componenti per impostazione predefinita" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Acquistabile" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Vendibile" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Gli articoli sono tracciabili per impostazione predefinita" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtuale" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Gli articoli sono virtuali per impostazione predefinita" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Mostra articoli correlati" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Visualizza parti correlate per ogni articolo" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Dati iniziali dello stock" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Consentire la creazione di uno stock iniziale quando si aggiunge una nuova parte" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Dati iniziali del fornitore" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Consentire la creazione dei dati iniziali del fornitore quando si aggiunge una nuova parte" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Formato di visualizzazione del nome articolo" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Formato per visualizzare il nome dell'articolo" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Icona predefinita Categoria Articolo" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Icona predefinita Categoria Articolo (vuoto significa nessuna icona)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Prezzi Minimi Decimali" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Numero minimo di decimali da visualizzare quando si visualizzano i dati dei prezzi" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Prezzi Massimi Decimali" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Numero massimo di decimali da visualizzare quando si visualizzano i dati dei prezzi" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Usa Prezzi Fornitore" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Includere le discontinuità di prezzo del fornitore nei calcoli generali dei prezzi" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Ignora la Cronologia Acquisti" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Cronologia dei prezzi dell'ordine di acquisto del fornitore superati con discontinuità di prezzo" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Utilizzare i prezzi degli articoli in stock" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Utilizzare i prezzi dei dati di magazzino inseriti manualmente per il calcolo dei prezzi" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Età dei prezzi degli articoli in stock" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Escludere dal calcolo dei prezzi gli articoli in giacenza più vecchi di questo numero di giorni" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Utilizza Variazione di Prezzo" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Includi la variante dei prezzi nei calcoli dei prezzi complessivi" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Solo Varianti Attive" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Utilizza solo articoli di varianti attive per calcolare i prezzi delle varianti" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "Aggiornamento Automatico Prezzi" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "Aggiorna automaticamente il prezzo degli articoli quando i dati interni cambiano" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Intervallo Di Ricostruzione Dei Prezzi" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Numero di giorni prima che il prezzo dell'articolo venga aggiornato automaticamente" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Prezzi interni" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Abilita prezzi interni per gli articoli" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Sovrascrivi Prezzo Interno" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Se disponibile, i prezzi interni sostituiscono i calcoli della fascia di prezzo" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Abilita stampa etichette" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Abilita la stampa di etichette dall'interfaccia web" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "Etichetta Immagine DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Risoluzione DPI quando si generano file di immagine da fornire ai plugin di stampa per etichette" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Abilita Report di Stampa" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Abilita generazione di report di stampa" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Modalità Debug" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Genera report in modalità debug (output HTML)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Registro errori" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Errori di log che si verificano durante la generazione dei report" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Dimensioni pagina" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Dimensione predefinita della pagina per i report PDF" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Forza Unità Parametro" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Se le unità sono fornite, i valori dei parametri devono corrispondere alle unità specificate" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Seriali Unici Globali" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "I numeri di serie per gli articoli di magazzino devono essere univoci" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Elimina scorte esaurite" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina il comportamento predefinito quando un articolo a magazzino è esaurito" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Modello Codice a Barre" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Modello per la generazione di codici batch predefiniti per gli elementi stock" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Scadenza giacenza" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Abilita funzionalità di scadenza della giacenza" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Vendi giacenza scaduta" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Consenti la vendita di stock scaduti" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Tempo di Scorta del Magazzino" -#: common/setting/system.py:718 +#: common/setting/system.py:727 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/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Crea giacenza scaduta" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Permetti produzione con stock scaduto" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Controllo della proprietà della giacenza" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Abilita il controllo della proprietà sulle posizioni e gli oggetti in giacenza" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Icona Predefinita Ubicazione di Magazzino" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Icona Predefinita Ubicazione di Magazzino (vuoto significa nessuna icona)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Mostra articoli a magazzino installati" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Visualizza gli articoli a magazzino installati nelle tabelle magazzino" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Verificare la distinta base durante l'installazione degli articoli" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Gli articoli di magazzino installati devono esistere nella distinta base per l'articolo principale" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Consenti trasferimento magazzino esaurito" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Consenti il trasferimento di articoli non disponibili a magazzino tra le diverse ubicazioni di magazzino" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Produzione" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di produzione" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "È richiesto il Proprietario Responsabile" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "A ogni ordine deve essere assegnato un proprietario responsabile" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Richiede Articolo Attivo" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Impedisci la creazione di ordini di produzione per gli articolo inattivi" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Richiede Articolo Bloccato" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Impedisci la creazione di ordini di costruzione per le parti sbloccate" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "Richiede un BOM valido" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Previene la creazione di ordini di costruzione a meno che BOM non sia stato convalidato" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "Richiedi Ordini Dei Figli Chiusi" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Impedisci il completamento dell'ordine di costruzione fino alla chiusura di tutti gli ordini figli" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "Ordini di Produzione Esterni" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "Abilita funzionalità ordini di produzione esterni" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Blocca Fino Al Passaggio Dei Test" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Impedisci che gli output di costruzione siano completati fino al superamento di tutti i test richiesti" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Abilita Ordini Di Reso" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Abilita la funzionalità ordine di reso nell'interfaccia utente" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Motivo di Riferimento per ordine di reso" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di reso" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Modifica Ordini Di Reso Completati" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Consenti la modifica degli ordini di reso dopo che sono stati completati" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Vendita" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di vendita" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Spedizione Predefinita Ordine Di Vendita" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Abilita la creazione di spedizioni predefinite con ordini di vendita" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Modifica Ordini Di Vendita Completati" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Consenti la modifica degli ordini di vendita dopo che sono stati spediti o completati" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "La Spedizione Richiede Controllo" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "Impedire il completamento delle spedizioni fino a quando gli articoli sono stati controllati" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Segna gli ordini spediti come completati" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Gli ordini di vendita contrassegnati come spediti saranno automaticamente completati, bypassando lo stato \"spedito\"" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Modello di Riferimento Ordine D'Acquisto" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di acquisto" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Modifica Ordini Di Acquisto Completati" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Consenti la modifica degli ordini di acquisto dopo che sono stati spediti o completati" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Converti Valuta" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "Converti il valore dell'elemento in valuta base quando si riceve lo stock" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Completa Automaticamente Gli Ordini D'Acquisto" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Contrassegna automaticamente gli ordini di acquisto come completi quando tutti gli elementi della riga sono ricevuti" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Abilita password dimenticata" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Abilita la funzione password dimenticata nelle pagine di accesso" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Abilita registrazione" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Abilita auto-registrazione per gli utenti nelle pagine di accesso" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "SSO abilitato" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Abilita SSO nelle pagine di accesso" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Abilita registrazione SSO" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Abilita l'auto-registrazione tramite SSO per gli utenti nelle pagine di accesso" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "Abilita sincronizzazione dei gruppi SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Abilita la sincronizzazione dei gruppi InvenTree con i gruppi forniti dall'IdP" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "Chiave gruppo SSO" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Il nome dell'attributo di richiesta di gruppi fornito dall'IdP" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "Mappa del gruppo SSO" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Una mappatura dai gruppi SSO ai gruppi InvenTree locali. Se il gruppo locale non esiste, verrà creato." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Rimuovere i gruppi al di fuori dell'SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Indica se i gruppi assegnati all'utente debbano essere rimossi se non sono backend dall'IdP. La disattivazione di questa impostazione potrebbe causare problemi di sicurezza" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Email richiesta" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Richiedi all'utente di fornire una email al momento dell'iscrizione" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Riempimento automatico degli utenti SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Compila automaticamente i dettagli dell'utente dai dati dell'account SSO" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Posta due volte" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Al momento della registrazione chiedere due volte all'utente l'indirizzo di posta elettronica" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Password due volte" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Al momento della registrazione chiedere agli utenti due volte l'inserimento della password" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Domini consentiti" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Limita la registrazione a determinati domini (separati da virgola, a partire da @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Gruppo iscrizione" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Gruppo a cui i nuovi utenti sono assegnati alla registrazione. Se la sincronizzazione di gruppo SSO è abilitata, questo gruppo è impostato solo se nessun gruppo può essere assegnato dall'IdP." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Applica MFA" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Gli utenti devono utilizzare la sicurezza a due fattori." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Abilitare questa impostazione richiederà a tutti gli utenti di impostare l'autenticazione multi fattore. Tutte le sessioni saranno disconnesse immediatamente." -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Controlla i plugin all'avvio" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Controlla che tutti i plugin siano installati all'avvio - abilita in ambienti contenitore" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Controlla gli aggiornamenti dei plugin" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Abilita controlli periodici per gli aggiornamenti dei plugin installati" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Abilita l'integrazione URL" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Attiva plugin per aggiungere percorsi URL" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Attiva integrazione navigazione" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Abilita i plugin per l'integrazione nella navigazione" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Abilita l'app integrata" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Abilita plugin per aggiungere applicazioni" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Abilita integrazione pianificazione" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Abilita i plugin per eseguire le attività pianificate" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Abilita eventi integrati" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Abilita plugin per rispondere agli eventi interni" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Abilita integrazione interfaccia" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Abilita i plugin per l'integrazione nell'interfaccia utente" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "Abilita integrazione email" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Abilita i plugin per elaborare le email in uscita/in arrivo" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "Abilita codici progetto" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Abilita i codici del progetto per tracciare i progetti" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "Abilita la funzionalità per registrare i livelli storici e il valore del magazzino" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Escludi Posizioni Esterne" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Inventario periodico automatico" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Visualizza i nomi completi degli utenti" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Mostra nomi completi degli utenti invece che nomi utente" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "Visualizza Profili Utente" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "Visualizza i profili degli utenti sulla pagina del loro profilo" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Abilita Dati Stazione Di Prova" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Abilita la raccolta dati della stazione di prova per i risultati del test" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "Abilita Ping Macchina" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Abilita l'attività di ping periodico delle macchine registrate per controllarne lo stato" @@ -3965,346 +3972,346 @@ msgstr "L'articolo è attivo" msgid "Manufacturer is Active" msgstr "Il produttore è attivo" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "L'articolo fornitore è attivo" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "L'articolo interno è attivo" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "Il fornitore è attivo" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Produttore" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Azienda" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Ha Scorte" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Aziende" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Descrizione azienda" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Descrizione dell'azienda" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Sito Web" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Sito web aziendale" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Telefono" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Numero di telefono di contatto" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Indirizzo email" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contatto" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Punto di contatto" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Collegamento alle informazioni aziendali esterne" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Questa azienda è attiva?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "È un cliente" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Vendi oggetti a questa azienda?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "È un fornitore" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Acquistate articoli da questa azienda?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "È un produttore" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Questa azienda produce articoli?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Valuta predefinita utilizzata per questa azienda" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "Partita IVA" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "Codice Fiscale Azienda" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Indirizzo" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Indirizzi" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Seleziona azienda" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Titolo indirizzo" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Titolo che descrive la voce indirizzo" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Indirizzo Principale" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Imposta come indirizzo primario" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Linea 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Indirizzo (linea 1)" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Linea 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Indirizzo (linea 2)" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "CAP" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Città/Regione" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Codice postale città/regione" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Stato/Provincia" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Stato o provincia" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Nazione" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Indirizzo Paese" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Note di spedizione del corriere" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Note per il corriere di spedizione" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Note di spedizione interne" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Note di spedizione per uso interno" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Collegamento alle informazioni sull'indirizzo (esterno)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Codice articolo produttore" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Articolo di base" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Seleziona articolo" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Seleziona Produttore" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "Codice articolo produttore (MPN)" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Codice articolo produttore" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL dell'articolo del fornitore" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Descrizione articolo costruttore" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Le unità del pacchetto devono essere compatibili con le unità dell'articolo base" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Le unità del pacchetto devono essere maggiori di zero" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fornitore" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Seleziona fornitore" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unità di giacenza magazzino fornitore" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Questo articolo fornitore è attivo?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Selezionare un produttore" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL dell'articolo del fornitore" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Descrizione articolo fornitore" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "costo base" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Confezionamento" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Imballaggio del pezzo" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Quantità Confezione" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantità totale fornita in una singola confezione. Lasciare vuoto per gli articoli singoli." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "multiplo" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Ordine multiplo" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Quantità disponibile dal fornitore" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilità Aggiornata" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Data dell’ultimo aggiornamento dei dati sulla disponibilità" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Sconto Prezzo Fornitore" @@ -4316,7 +4323,7 @@ msgstr "Valuta predefinita utilizzata per questo fornitore" msgid "Company Name" msgstr "Nome Azienda" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "In magazzino" @@ -4452,7 +4459,7 @@ msgstr "Il campo non esiste nel modello di destinazione" msgid "Selected field is read-only" msgstr "Il campo selezionato è di sola lettura" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Sessione d'importazione" @@ -4464,31 +4471,31 @@ msgstr "Campo" msgid "Column" msgstr "Colonna" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Indice riga" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Dati riga originali" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Errori" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Valido" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "L'ID è richiesto per aggiornare i record esistenti." -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Nessun record trovato con l'ID fornito" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Formato ID fornito non valido" @@ -4588,7 +4595,7 @@ msgstr "Numero di copie da stampare per ogni etichetta" msgid "Connected" msgstr "Connesso" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Sconosciuto" @@ -4716,105 +4723,117 @@ msgstr "Progresso Massimo" msgid "Maximum value for progress type, required if type=progress" msgstr "Valore massimo per il tipo di avanzamento, richiesto se tipo = progresso" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Riferimento ordine" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "In Sospeso" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Ha il codice del progetto" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Creato Da" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Creato prima" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Creato dopo" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "Ha data d'inizio" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "Data d'inizio prima" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "Data d'inizio dopo" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "Ha data di fine" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Data obiettivo prima" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Data obiettivo dopo" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Prezzo Articolo" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Completato prima" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Completato dopo" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "Ordine di Produzione Esterno" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Ordine" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Ordine completato" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Articolo interno" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Ordine in sospeso" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Completato" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Ha Spedizione" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Ordine D'Acquisto" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Ordine D'Acquisto" msgid "Sales Order" msgstr "Ordini di Vendita" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Prezzo Totale" msgid "Total price for this order" msgstr "Prezzo totale dell'ordine" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Valuta ordine" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta per questo ordine (lasciare vuoto per usare il valore predefinito dell'azienda)" @@ -4851,718 +4870,742 @@ msgstr "Valuta per questo ordine (lasciare vuoto per usare il valore predefinito msgid "This order is locked and cannot be modified" msgstr "Questo ordine è bloccato e non può essere modificato" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Il contatto non corrisponde all'azienda selezionata" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "La data d'inizio deve essere precedente alla data di fine" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "L'indirizzo non corrisponde all'azienda selezionata" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Descrizione dell'ordine (opzionale)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Seleziona il codice del progetto per questo ordine" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Collegamento a un sito web esterno" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Data iniziale" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Data d'inizio programmata per questo ordine" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data scadenza" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Data prevista per la consegna dell'ordine. L'ordine scadrà dopo questa data." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Data di emissione" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Data di emissione ordine" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Utente o gruppo responsabile di questo ordine" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Punto di contatto per questo ordine" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Indirizzo dell'azienda per questo ordine" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Riferimento ordine" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Stato" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Stato ordine d'acquisto" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Azienda da cui sono stati ordinati gli articoli" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Riferimento fornitore" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Codice di riferimento ordine fornitore" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "ricevuto da" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Data ordine completato" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Destinazione" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Destinazione per gli elementi ricevuti" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Il fornitore dell'articolo deve corrispondere al fornitore dell'ordine di produzione" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "L'elemento di riga non corrisponde all'ordine di acquisto" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Manca un elemento collegato" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "La quantità deve essere un numero positivo" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Azienda da cui sono stati ordinati gli elementi" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Stato ordine di vendita" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Riferimento Cliente " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Codice di riferimento Ordine del Cliente" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Data di spedizione" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "spedito da" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "L'ordine è già stato completato" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "L'ordine è già stato annullato" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Solo un ordine aperto può essere contrassegnato come completo" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "L'ordine non può essere completato in quanto ci sono spedizioni incomplete" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "L'ordine non può essere completato perché ci sono allocazioni incomplete" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "L'ordine non può essere completato perché ci sono elementi di riga incompleti" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "L'ordine è bloccato e non può essere modificato" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Quantità Elementi" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Riferimento Linea Elemento" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Note linea elemento" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Data di destinazione per questa voce di riga (lasciare vuoto per utilizzare la data di destinazione dall'ordine)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Descrizione della parte (opzionale)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Contesto aggiuntivo per questa voce" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Prezzo unitario" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "Riga ordine d'acquisto" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "L'articolo del fornitore deve corrispondere al fornitore" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "L'ordine di produzione deve essere contrassegnato come esterno" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "Gli ordini di costruzione possono essere collegati solo alle parti di assemblaggio" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "L'articolo dell'ordine di produzione deve corrispondere all'articolo della riga" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Articolo Fornitore" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Ricevuto" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Numero di elementi ricevuti" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Prezzo di Acquisto" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Prezzo di acquisto unitario" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "Ordine di produzione esterno che deve essere eseguito da questo articolo" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "Riga Extra ordine di acquisto" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "Articolo ordine di vendita" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Solo gli articoli vendibili possono essere assegnati a un ordine di vendita" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Prezzo di Vendita" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Prezzo unitario di vendita" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Spedito" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Quantità spedita" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "Spedizione dell'ordine di vendita" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "L'indirizzo di spedizione deve corrispondere al cliente" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "Indirizzo di consegna per questa spedizione" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Data di spedizione" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Data di consegna" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Data di consegna della spedizione" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Verificato Da" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Utente che ha controllato questa spedizione" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Spedizione" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Numero di spedizione" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Numero di monitoraggio" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Informazioni di monitoraggio della spedizione" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Numero Fattura" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Numero di riferimento per la fattura associata" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "La spedizione è già stata spedita" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "La spedizione non ha articoli di stock assegnati" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "La spedizione deve essere controllata prima che possa essere completata" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "Riga Extra ordine di vendita" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "Assegnazione Ordini Di Vendita" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "L'elemento di magazzino non è stato assegnato" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Impossibile allocare l'elemento stock a una linea con un articolo diverso" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Impossibile allocare stock a una riga senza un articolo" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantità deve essere 1 per l'elemento serializzato" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "L'ordine di vendita non corrisponde alla spedizione" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "La spedizione non corrisponde all'ordine di vendita" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Linea" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Riferimento della spedizione ordine di vendita" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Elemento" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Seleziona elemento stock da allocare" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Inserisci la quantità assegnata alla giacenza" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Riferimento ordine di reso" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Società a cui vengono restituiti gli articoli" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Stato ordine di reso" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "Articolo Linea Ordine Reso" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "L'elemento stock deve essere specificato" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "Quantità di reso superiore alla quantità di scorta" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "La quantità di reso deve essere maggiore di zero" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "Quantità non valida per l'elemento stock serializzato" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Seleziona l'elemento da restituire dal cliente" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Data di ricezione" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "La data in cui questo articolo restituito è stato ricevuto" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Risultati" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Risultato per questa voce di riga" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Costo associato alla restituzione o riparazione per questa voce di linea" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "Riga Extra ordine di reso" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID Ordine" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID dell'ordine da duplicare" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Copia Linee" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Copia gli elementi di riga dall'ordine originale" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Copia Linee Extra" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Copia gli elementi di riga extra dall'ordine originale" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Copia parametri" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Elementi Riga" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Righe Completate" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplica Ordine" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Specifica le opzioni per duplicare questo ordine" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "ID dell'ordine non corretto" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Nome Fornitore" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "L'ordine non può essere cancellato" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Consenti di chiudere l'ordine con elementi di riga incompleti" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "L'ordine ha elementi di riga incompleti" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "L'ordine non è aperto" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Prezzo Automatico" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcola automaticamente il prezzo di acquisto in base ai dati del fornitore articolo" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Valuta prezzo d'acquisto" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Unisci elementi" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Unisce gli elementi con lo stesso articolo, destinazione e data di destinazione in una riga" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "Codice articolo" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Numero Dell'articolo Interno" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Numero Articolo Interno" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "L'articolo del fornitore deve essere specificato" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "L'ordine di acquisto deve essere specificato" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "L'ordine di acquisto deve essere abbinato al fornitore" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Elemento Riga" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Inserisci il codice univoco per gli articoli in arrivo" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data di Scadenza" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "Inserisci la data di scadenza per gli articoli in arrivo" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Inserisci i numeri di serie per gli articoli stock in arrivo" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "Sovrascrivi le informazioni d'imballaggio per gli articoli in arrivo" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "Nota aggiuntiva per gli articoli in arrivo" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Codice a Barre" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Codice a barre scansionato" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Il codice a barre è già in uso" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Gli elementi di linea devono essere forniti" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "I valori dei codici a barre forniti devono essere univoci" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Spedizioni" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Spedizioni Completate" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Valuta prezzo di vendita" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Elementi Assegnati" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Nessun dettaglio di spedizione fornito" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "L'elemento di riga non è associato a questo ordine" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "La quantità deve essere positiva" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Inserisci i numeri di serie da assegnare" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "La spedizione è già stata spedita" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "La spedizione non è associata con questo ordine" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Nessuna corrispondenza trovata per i seguenti numeri di serie" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "I seguenti numeri di serie non sono disponibili" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Articoli Linea Ordine Reso" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "L'elemento di riga non corrisponde all'ordine di reso" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "L'elemento di riga è già stato ricevuto" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Gli elementi possono essere ricevuti solo con ordini in corso" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "Quantità da restituire" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Valuta del prezzo" @@ -5598,146 +5641,146 @@ msgstr "Rimborso" msgid "Reject" msgstr "Rifiuta" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Ordine D'Acquisto in ritardo" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "L'ordine d'acquisto {po} è in ritardo" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Ordini Di Vendita in ritardo" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "L'ordine di vendita {so} è ora in ritardo" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Ordini di Reso in Ritardo" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "L'ordine di reso {ro} è ora in ritardo" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Preferiti" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filtra per categorie preferite" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Profondità" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtra per profondità categoria" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Livello principale" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtra per categorie di primo livello" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Cascata" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Includi sottocategorie nei risultati filtrati" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Genitore" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filtra per categoria genitore" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Escludi sottocategorie sotto la categoria specificata" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Ha Risultati" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "È una Variante" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "E' una revisione" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Ha revisioni" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "BOM Valido" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Categorie a Cascata" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Se Vero, includere gli elementi nelle categorie figlie della categoria specificata" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtra per categoria ID numerica o per la stringa 'null'" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "L'articolo assemblato è provabile" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "Il componente è provabile" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Utilizzi" @@ -5750,7 +5793,7 @@ msgstr "Categoria Articoli" msgid "Part Categories" msgstr "Categorie Articolo" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Posizione Predefinita" @@ -5778,7 +5821,7 @@ msgstr "Parole chiave predefinite per gli articoli in questa categoria" msgid "Icon" msgstr "Icona" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icona (facoltativa)" @@ -5799,7 +5842,7 @@ msgstr "Valore Predefinito" msgid "Default Parameter Value" msgstr "Valore Parametro Predefinito" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Articoli" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "L'articolo non può essere una revisione di se stesso" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "Non puoi fare la revisione di un articolo che è già una revisione" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "Il codice di revisione deve essere specificato" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "Le revisioni sono consentite solo per le parti di assemblaggio" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "Non è possibile effettuare la revisione di un articolo modello" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "L'articolo genitore deve puntare allo stesso modello" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Esiste già un elemento stock con questo numero seriale" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "Non è consentito duplicare IPN nelle impostazioni dell'articolo" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "La revisione dell'articolo duplicata esiste già." -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Un articolo con questo Nome, IPN e Revisione esiste già." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Gli articoli non possono essere assegnati a categorie articolo principali!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Nome articolo" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "È Template" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Quest'articolo è un articolo di template?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Questa parte è una variante di un altro articolo?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Variante Di" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Descrizione della parte (opzionale)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Parole Chiave" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN - Numero di riferimento interno" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Numero di revisione o di versione" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Revisione" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "Questo articolo è una revisione di un altro articolo?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Revisione di" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Dove viene normalmente immagazzinato questo articolo?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Scadenza Predefinita" -#: part/models.py:1229 +#: part/models.py:1223 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:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Scorta Minima" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Livello minimo di giacenza consentito" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Unita di misura per questo articolo" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Questo articolo può essere costruito da altri articoli?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Questo articolo può essere utilizzato per costruire altri articoli?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Questo articolo ha il tracciamento per gli elementi unici?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "Questo articolo può avere delle prove registrate?" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Quest'articolo può essere acquistato da fornitori esterni?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Questo pezzo può essere venduto ai clienti?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Quest'articolo è attivo?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Gli articoli bloccati non possono essere modificati" -#: part/models.py:1300 +#: part/models.py:1294 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:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "BOM Convalidata" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "Il BOM per questa parte è valido?" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Somma di controllo Distinta Base" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Somma di controllo immagazzinata Distinta Base" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "Distinta Base controllata da" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Data di verifica Distinta Base" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Creazione Utente" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Utente responsabile di questo articolo" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Vendita multipla" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Valuta utilizzata per calcolare i prezzi" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Costo Minimo Distinta Base" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Costo minimo dei componenti dell'articolo" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Costo Massimo Distinta Base" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Costo massimo dei componenti dell'articolo" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Importo Acquisto Minimo" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Costo minimo di acquisto storico" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Importo massimo acquisto" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Costo massimo di acquisto storico" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Prezzo Interno Minimo" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Costo minimo basato su interruzioni di prezzo interne" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Prezzo Interno Massimo" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Costo massimo basato su interruzioni di prezzo interne" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Prezzo Minimo Fornitore" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Prezzo minimo articolo da fornitori esterni" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Prezzo Massimo Fornitore" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Prezzo massimo dell'articolo proveniente da fornitori esterni" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Variazione di costo minimo" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Costo minimo calcolato di variazione dell'articolo" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Massima variazione di costo" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Costo massimo calcolato di variazione dell'articolo" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Costo Minimo" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Sovrascrivi il costo minimo" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Costo Massimo" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Sovrascrivi il costo massimo" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Costo minimo totale calcolato" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Costo massimo totale calcolato" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Prezzo Di Vendita Minimo" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Prezzo minimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Prezzo Di Vendita Massimo" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Prezzo massimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Prezzo storico minimo di vendita" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Prezzo storico massimo di vendita" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Articolo per l'inventario" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Contatore Elemento" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Numero di scorte individuali al momento dell'inventario" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Totale delle scorte disponibili al momento dell'inventario" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Data in cui è stato effettuato l'inventario" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Costo Minimo Scorta" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Costo minimo stimato di magazzino a disposizione" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Costo Massimo Scorte" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Costo massimo stimato di magazzino a disposizione" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "Aggiungi Prezzo Ribassato di Vendita dell'Articolo" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "Modello Prove Articolo" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Nome modello non valido - deve includere almeno un carattere alfanumerico" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Il modello di prova può essere creato solo per gli articoli testabili" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "Il modello di test con la stessa chiave esiste già per l'articolo" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Nome Test" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Inserisci un nome per la prova" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "Chiave Di Prova" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "Chiave semplificata per la prova" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Inserisci descrizione per questa prova" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "Questo test è attivo?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Richiesto" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Questa prova è necessaria per passare?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Valore richiesto" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Questa prova richiede un valore quando si aggiunge un risultato di prova?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Allegato Richiesto" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Questa prova richiede un file allegato quando si aggiunge un risultato di prova?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "Scelte valide per questo test (separate da virgole)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "L'articolo nella distinta base non può essere modificato - l'assemblaggio è bloccato" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "L'articolo nella distinta base non può essere modificato - l'assemblaggio della variante è bloccato" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Seleziona articolo principale" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Articolo subordinato" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Seleziona l'articolo da utilizzare nella Distinta Base" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Quantità Distinta Base per questo elemento Distinta Base" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Questo elemento della Distinta Base è opzionale" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Questo elemento della Distinta Base è consumabile (non è tracciato negli ordini di produzione)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "Imposta quantità" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Quantità extra necessaria per una generazione, per tenere conto delle perdite di configurazione" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "Logoramento" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Stima del logoramento per una build, espressa in percentuale (0-100)" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "Arrotondamento Multiplo" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Arrotonda la quantità di produzione richiesta al multiplo più vicino di questo valore" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Riferimento Elemento Distinta Base" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Note Elemento Distinta Base" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Codice di controllo" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Codice di controllo Distinta Base" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Convalidato" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Questo articolo della distinta base è stato validato" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Viene Ereditato" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Questo elemento della Distinta Base viene ereditato dalle Distinte Base per gli articoli varianti" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Gli elementi in giacenza per gli articoli varianti possono essere utilizzati per questo elemento Distinta Base" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La quantità deve essere un valore intero per gli articoli rintracciabili" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "L'articolo subordinato deve essere specificato" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Elemento Distinta Base Sostituito" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sostituita non può essere la stessa dell'articolo principale" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Elemento principale Distinta Base" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Sostituisci l'Articolo" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Articolo 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Articolo 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Seleziona Prodotto Relativo" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Nota per questa relazione" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Non si può creare una relazione tra l'articolo e sé stesso" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Categoria Superiore" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Categoria articolo principale" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Sottocategorie" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Risultati" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Numero di risultati registrati rispetto a questo modello" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Valuta di acquisto di questo articolo in stock" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Il file non è un immagine" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Articolo Originale" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Seleziona l'articolo originale da duplicare" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Copia immagine" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Copia immagine dall'articolo originale" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copia Distinta Base" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Copia fattura dei materiali dall'articolo originale" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Copia parametri" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Copia i dati dei parametri dall'articolo originale" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Copia note" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Copia note dall'articolo originale" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Copia Test" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Copia modelli di test dall'articolo originale" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Specificare la quantità iniziale disponibile per questo Articolo. Se la quantità è zero, non viene aggiunta alcuna quantità." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Codice articolo Produttore" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Nome Categoria" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "In Costruzione" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Quantità di questo articolo attualmente in produzione" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Eccezionale quantità di questa parte prevista da costruire" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Articoli in magazzino" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "Revisioni" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Giacenze Totali" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Scorte Non Assegnate" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Scorta Variante" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Duplica articolo" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Copia i dati iniziali da un altro Articolo" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Stock iniziale" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Crea Articolo con quantità di scorta iniziale" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Informazioni Fornitore" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Copia Parametri Categoria" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Copia i parametri dai modelli della categoria articolo selezionata" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Immagine esistente" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Nome del file di un'immagine articolo esistente" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Il file immagine non esiste" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Convalida l'intera Fattura dei Materiali" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Puoi produrre" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Richiesto per gli Ordini di Produzione" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Assegnato agli Ordini di Produzione" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Richiesto per gli Ordini di Vendita" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Assegnato agli Ordini di Vendita" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Sovrascrivi valore calcolato per il prezzo minimo" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Valuta del prezzo minimo" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Prezzo Massimo" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Sovrascrivi valore calcolato per il prezzo massimo" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Valuta del prezzo massimo" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Impossibile convertire dalle valute fornite in {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Il prezzo minimo non può essere maggiore del prezzo massimo" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Il prezzo massimo non può essere minore del prezzo minimo" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Seleziona l'assemblaggio padre" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Seleziona la componente" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notifica di magazzino bassa" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Lo stock disponibile per {part.name} è sceso sotto il livello minimo configurato" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Notifica di magazzino" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "Hai 1 oggetto in magazzino che si avvicina alla data di scadenza" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "Hai {item_count} oggetti in magazzino che si avvicinano alla data di scadenza" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Nessuna data di scadenza." -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "Scaduto {abs(days_diff)} giorni fa" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Scade oggi" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} giorni" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "L'installazione dei plugin è disattivata" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin installato con successo" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plugin installato in {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nessun autore trovato" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "Installazione non confermata" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "Totale" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Numero Seriale" @@ -8215,7 +8268,7 @@ msgstr "Test Report Elemento Stock" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Elementi installati" @@ -8248,184 +8301,196 @@ msgstr "Nessun risultato (richiesto)" msgid "No result" msgstr "Nessun risultato" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "File immagine non trovato" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Nome della parte (maiuscole e minuscole)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Il nome della parte contiene (maiuscole e minuscole)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Nome della parte (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "IPN della parte (maiuscole e minuscole)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "IPN della parte contiene (maiuscole e minuscole)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "IPN della parte (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Giacenza minima" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Giacenza massima" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Codici di stato" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Ubicazione Esterna" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Obsoleto" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "La quantità è richiesta" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Deve essere fornita un articolo valido" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "I numeri di serie non possono essere forniti per un articolo non tracciabile" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Ubicazione magazzino" @@ -8449,11 +8514,11 @@ msgstr "Ubicazione magazzino" msgid "Stock Locations" msgstr "Posizioni magazzino" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Proprietario" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Seleziona Owner" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Non puoi rendere strutturale questa posizione di magazzino perché alcuni elementi di magazzino sono già posizionati al suo interno!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "L'articolo deve essere specificato" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Gli articoli di magazzino non possono essere ubicati in posizioni di magazzino strutturali!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Non è possibile creare un elemento di magazzino per articoli virtuali" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "La quantità deve essere 1 per elementi con un numero di serie" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Il numero di serie non può essere impostato se la quantità è maggiore di 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "L'elemento non può appartenere a se stesso" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "L'elemento deve avere un riferimento di costruzione se is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Il riferimento di costruzione non punta allo stesso oggetto dell'articolo" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Elemento di magazzino principale" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Articolo base" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Seleziona un fornitore articolo corrispondente per questo elemento di magazzino" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Dove si trova questo articolo di magazzino?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Imballaggio di questo articolo di magazzino è collocato in" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Installato In" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Questo elemento è stato installato su un altro elemento?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Numero di serie per questo elemento" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Codice lotto per questo elemento di magazzino" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Quantità disponibile" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Genera Costruzione" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Costruisci per questo elemento di magazzino" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Origina Ordine di Acquisto" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Ordine d'acquisto per questo articolo in magazzino" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Destinazione Ordine di Vendita" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Data di scadenza per l'elemento di magazzino. Le scorte saranno considerate scadute dopo questa data" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Elimina al esaurimento" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Cancella questo Elemento di Magazzino quando la giacenza è esaurita" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Prezzo di acquisto unitario al momento dell’acquisto" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Convertito in articolo" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "L'articolo non è impostato come tracciabile" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "La quantità deve essere un numero intero" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "I numeri di serie devono essere forniti come elenco" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "La quantità non corrisponde ai numeri di serie" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "L'elemento di magazzino è stato assegnato a un ordine di vendita" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "L'elemento di magazzino è installato in un altro elemento" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "L'elemento di magazzino contiene altri elementi" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "L'elemento di magazzino è stato assegnato a un cliente" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "L'elemento di magazzino è attualmente in produzione" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Il magazzino serializzato non può essere unito" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Duplica elementi di magazzino" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo fornitore" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "I codici di stato dello stock devono corrispondere" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Le giacenze non possono essere spostate perché non disponibili" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Note d'ingresso" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Il valore deve essere fornito per questo test" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "L'allegato deve essere caricato per questo test" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Risultato Test" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Test valore output" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Risultato della prova allegato" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Note del test" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Elemento principale" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Inserisci i numeri di serie per i nuovi elementi" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Scaduto" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Elementi secondari" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Inserisci il numero di elementi di magazzino da serializzare" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La quantità non deve superare la quantità disponibile ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Numeri di serie non possono essere assegnati a questo articolo" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Numeri di serie già esistenti" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Seleziona elementi di magazzino da installare" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Aggiungi nota di transazione (opzionale)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Elemento di magazzino non disponibile" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "L'articolo selezionato non è nella Fattura dei Materiali" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Posizione di destinazione per gli elementi disinstallati" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Seleziona l'articolo in cui convertire l'elemento di magazzino" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "L'articolo selezionato non è una valida opzione per la conversione" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Sottoallocazioni" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "L'articolo deve essere vendibile" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "L'elemento è assegnato a un ordine di vendita" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "Elemento assegnato a un ordine di costruzione" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Cliente a cui assegnare elementi di magazzino" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "L'azienda selezionata non è un cliente" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Note sull'assegnazione delle scorte" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Deve essere fornito un elenco degli elementi di magazzino" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Note di fusione di magazzino" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Consenti fornitori non corrispondenti" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Consenti di unire gli elementi di magazzino che hanno fornitori diversi" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Consenti stato non corrispondente" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Consenti di unire gli elementi di magazzino con diversi codici di stato" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Devono essere riforniti almeno due elementi in magazzino" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Nessun cambiamento" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Valore di chiave primaria StockItem" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Note sugli spostamenti di magazzino" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "Cognome dell'utente" msgid "Email address of the user" msgstr "Indirizzo email dell'utente" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Questo utente ha i permessi dello staff" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Superuser" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Questo utente è un superutente" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Questo account utente è attivo" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Il tuo account è stato creato." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Si prega di utilizzare la funzione di reimpostazione password per accedere" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Benvenuto in InvenTree" diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po index db831f26b4..499f71b2b5 100644 --- a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "APIエンドポイントが見つかりません" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "バルク運転には、品目またはフィルターのリストが必要です" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "項目はリストとして提供されなければなりません" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "無効なアイテムリスト" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "フィルタはディクショナリとして提供されなければなりません" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "提供されたフィルタが無効" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "すべてのフィルターは真の場合にのみ使用されなければならない" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "指定された条件に一致する項目がありません" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "データの提供がありません。" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "この項目は一意である必要があります。" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "ユーザーにこのモデルを表示する権限がありません" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "{original}を{unit}に変換できませんでした。" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "数量コードが無効です" @@ -112,13 +104,13 @@ msgstr "日付を入力する" msgid "Invalid decimal value" msgstr "無効な10進数値" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "メモ" @@ -131,75 +123,91 @@ msgstr "値 '{name}' はパターン形式で表示されません" msgid "Provided value does not match required pattern: " msgstr "指定された値が必要なパターンと一致しません: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "一度に1000以上のアイテムをシリアライズすることはできません。" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "シリアル番号は空です" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "重複シリアル" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "無効なグループです:{group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "グループ範囲 {group} が許容数量を超過 ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "シリアル番号が見つかりません" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "固有のシリアル番号の数({n})は数量({q})と一致する必要があります。" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "この値からHTMLタグを削除" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "データに禁止されているマークダウン・コンテンツが含まれています。" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "接続エラー" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "サーバは無効なステータスコードで応答しました" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "例外が発生しました" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "サーバーが無効なContent-Length値で応答しました" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "画像サイズが大きすぎます" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "画像のダウンロードが最大サイズを超えました" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "リモートサーバーが空のレスポンスを返しました" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "指定されたURLは有効な画像ファイルではありません" @@ -207,11 +215,11 @@ msgstr "指定されたURLは有効な画像ファイルではありません" msgid "Log in to the app" msgstr "アプリにログイン" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "メールアドレス" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "二要素認証を有効にする必要があります。" @@ -259,18 +267,18 @@ msgstr "参照番号が大きすぎる" msgid "Invalid choice" msgstr "無効な選択です" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "お名前" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "説明" msgid "Description (optional)" msgstr "説明 (オプション)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "パス" @@ -313,75 +321,66 @@ msgstr "バーコードデータのユニークなハッシュ" msgid "Existing barcode found" msgstr "既存のバーコードが見つかりました" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "タスクの失敗" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "バックグラウンドワーカータスク'{f}'が{n}回試行した後に失敗しました" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "サーバーエラー" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "サーバーによってエラーが記録されました。" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "画像" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "通貨" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "利用可能なオプションから通貨を選択してください" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "この項目は空欄にできません。" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "無効な値です。" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "遠隔画像" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "外部画像ファイルのURL" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "外部URLからの画像ダウンロードは許可されていません" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "リモートURLからの画像ダウンロードに失敗しました" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "無効なコンテンツタイプ形式です" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "コンテンツタイプが見つかりません" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "コンテンツタイプが必須のミックスインクラスと一致しません" @@ -537,11 +536,11 @@ msgstr "中国語 (簡体字)" msgid "Chinese (Traditional)" msgstr "中国語 (繁体字)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "アップデートが利用可能" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "InvenTreeの更新版が利用可能になりました" @@ -553,30 +552,30 @@ msgstr "無効な物理単位" msgid "Not a valid currency code" msgstr "有効な通貨コードではありません。" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "注文ステータス" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "親ビルド" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "バリアントを含む" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "バリアントを含む" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "バリアントを含む" msgid "Part" msgstr "パーツ" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "カテゴリ" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "祖先ビルド" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "担当" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "割り当て" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "作成前" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "の後に作成されました。" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "開始日あり" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "開始日 前" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "開始日 後" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "目標期日あり" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "目標期日" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "以降の目標日" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "完成前" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "終了後" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "最小日付" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "最大日付" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "ツリーを除く" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "削除するには、ビルドをキャンセルする必要があります。" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "消耗品" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "オプション" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "アセンブリ" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "追跡" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "テスト可能" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "受注残高" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "割り当てられた" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "消費されました" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "利用可能" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "注文中" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "組立注文" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "場所" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "出力" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "出力ストックアイテムIDでフィルタリングします。未インストールビルドアイテムを検索するには「null」をご使用ください。" @@ -748,41 +751,41 @@ msgstr "出力ストックアイテムIDでフィルタリングします。未 msgid "Build Orders" msgstr "組立注文" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "アセンブリBOMが検証されていません" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "非アクティブな部品にビルドオーダーを作成できません。" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "ロックされていない部品にビルドオーダーを作成できません。" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "ビルドオーダーを外部委託できるのは、購入可能部品のみです" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "担当ユーザーまたはグループを指定する必要があります。" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "ビルドオーダー部品は変更できません" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "目標期日は開始日以降であること" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "ビルド・オーダー・リファレンス" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "ビルド・オーダー・リファレンス" msgid "Reference" msgstr "参照" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "建築の簡単な説明(任意)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "製造する部品の選択" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "セールス・オーダー・リファレンス" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "ソース・ロケーション" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "このビルドで在庫を取得する場所を選択します(任意の在庫場所から取得する場合は空白のままにしてください)。" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "外部ビルド" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "このビルドオーダーは外部委託されます。" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "目的地" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "完成したアイテムの保管場所を選択" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "数量" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "構築するストックアイテムの数" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "完成品" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "完了した在庫アイテムの数" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "組立状況" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "ビルドステータスコード" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "バッチコード" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "このビルド出力のバッチコード" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "作成日時" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "ビルド開始日" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "この注文の開始予定日" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "完成目標日" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "ビルド完了目標日。この日付を過ぎると、ビルドは期限切れになります。" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "完了日" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "完了者" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "発行者" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "このビルドオーダーを発行したユーザー" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "責任" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "このビルドオーダーを担当するユーザーまたはグループ" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "外部リンク" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "外部 サイト へのリンク" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "組立優先度" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "建設順序の優先順位" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "プロジェクトコード" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "プロジェクトコード" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "製造中の子ビルドがあるため、ビルドオーダーを完了できません" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "不完全な出力があるため、ビルドオーダーを完了できません" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "ビルドの割り当てを完了するタスクのオフロードに失敗しました。" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "ビルドオーダー{build}が完了しました" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "建設発注が完了しました" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "追跡可能な部品については、シリアル番号の提示が必要です。" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "ビルド出力が指定されていません" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "ビルド出力はすでに完了しています" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "ビルド出力がビルド順序と一致しません" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "数量はゼロより大きくなければなりません" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "数量が出力数量を上回ることはできません" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "ビルド出力は、必要なすべてのテストを通過していません" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "ビルド出力 {serial} は、必要なすべてのテストに合格していません。" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "割り当てられた項目を含むビルド出力の一部のみを完了することはできません" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "ビルドオーダーラインアイテム" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "ビルドオブジェクト" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "ビルドオブジェクト" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "数量" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "注文数量" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "消費された在庫の数量" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "ビルド項目は、ビルド出力を指定する必要があります。" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "選択された在庫品目が部品表に一致しません。" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "シリアル在庫の場合、数量は1でなければなりません。" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "割当数量({q})は在庫可能数量({a})を超えてはなりません。" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "在庫が過剰配分" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "在庫商品" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "ソース在庫品" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "建設に割り当てる在庫量" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "インストール" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "仕向け地在庫品" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "ビルドレベル" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "部品名" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "ビルド出力" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "ビルド出力が親ビルドと一致しません" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "出力部分が BuildOrder 部分と一致しません。" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "このビルド出力はすでに完了しています" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "このビルド出力は完全に割り当てられていません" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "ビルド出力の数量を入力" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "追跡可能な部品に必要な整数個数" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "部品表には追跡可能な部品が含まれるため、必要な数量は整数" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "シリアル番号" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "ビルド出力のためのシリアル番号の入力" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "ビルド出力のストック位置" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "シリアル番号の自動割り当て" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "シリアル番号が一致する必要なアイテムを自動的に割り当て" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "以下のシリアル番号は既に存在するか、無効です。" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "ビルド出力のリストを提供する必要があります。" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "スクラップされたアウトプットの在庫場所" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "廃棄割り当て" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "廃棄されたアウトプットに割り当てられた在庫の破棄" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "ビルドアウトプットを廃棄する理由" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "完成した建造物のアウトプットの場所" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "不完全割当の受入れ" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "在庫が完全に割り当てられていない場合は、出力を完了します。" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "割当在庫の消費" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "このビルドに割り当て済みのストックを消費します。" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "不完全な出力の削除" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "完了していないビルド出力を削除します。" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "不可" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "このビルド・オーダーで消費されるものとして受け入れます。" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "このビルドオーダーを完了する前に割り当てを解除します。" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "総合在庫" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "製造オーダーに割り当てられた余分な在庫品をどのように処理しますか?" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "一部の在庫品目は全体的に配分されています。" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "未割り当ての受け入れ" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "在庫アイテムがこのビルド・オーダーに完全に割り当てられていないことを受け入れます。" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "必要在庫の配分が完了していません" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "インコンプリートの受け入れ" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "必要な数のビルドアウトプットが完了していないことを受け入れます。" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "必要な構築数量が完了していません" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "ビルド・オーダーには未完成の子ビルド・オーダーがあります。" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "受注生産状態であること" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "ビルド・オーダーの出力が不完全" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "組立ライン" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "ビルド出力" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "ビルド出力は同じビルド" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "ビルドラインアイテム" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.partは、ビルドオーダーと同じパーツを指す必要があります。" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "在庫があること" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "使用可能数量({q})を超過" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "追跡部品の割り当てには、ビルド出力を指定する必要があります。" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "追跡されていない部品の割り当てでは、ビルド出力を指定できません。" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "割り当て項目の提供" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "部品を調達する在庫場所(任意の場所から調達する場合は空白にしてください。)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "場所を除く" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "この選択された場所から在庫商品を除外" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "交換可能ストック" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "複数の拠点にある在庫品を交換可能" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "代替ストック" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "代替部品の割り当て" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "オプション" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "オプションのBOMアイテムをビルドオーダーに割り当てます。" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "自動割り当てタスクの開始に失敗しました" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "BOMリファレンス" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "BOMパーツID" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "部品表 部品名" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "ビルド" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "サプライヤー" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "割当数量" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "ビルドリファレンス" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "部品分類名" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "追跡可能" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "継承" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "バリアントを許可" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOMアイテム" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "生産中" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "ビルド予定" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "外部在庫" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "在庫状況" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "利用可能な代替ストック" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "在庫状況" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "消費量が割り当て量を超過しています" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "在庫消費に関する任意の注記" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "ビルド項目は正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "重複したビルド項目の割り当て" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "ビルドラインは正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "重複したビルドラインの割り当て" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "少なくとも1つの項目または行を指示する必要があります" @@ -1495,43 +1494,43 @@ msgstr "保留中" msgid "Cancelled" msgstr "キャンセル済" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "完了" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "受注生産に必要な在庫" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "ビルドオーダー{build}には追加の在庫が必要となります" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "期限切れ注文" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "ビルドオーダー{bo}は現在期限切れです" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "リンク" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "ファイル" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "ユーザーにはこれらの添付ファイルを削除する権限がありません。" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "ユーザーにはこの添付ファイルを削除する権限がありません" @@ -1555,794 +1554,794 @@ msgstr "プラグインなし" msgid "Project Code Label" msgstr "プロジェクトコードラベル" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "更新しました" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "最終更新のタイムスタンプ" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "更新者:" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "このオブジェクトを最後に更新したユーザー" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "独自のプロジェクトコード" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "プロジェクトの説明" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "このプロジェクトを担当するユーザーまたはグループ" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "設定キー" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "設定値" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "選択された値は有効なオプションではありません。" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "値はブール値でなければなりません。" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "値は整数値でなければなりません。" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "値は有効な数値でなければなりません。" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "値がバリデーション・チェックに合格しない" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "キー文字列は一意でなければなりません。" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "ユーザー" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "価格破壊数量" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "価格" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "指定数量での単価" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "エンドポイント" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "このウェブフックを受信するエンドポイント" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "このウェブフックの名前" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "有効" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "このウェブフックはアクティブですか" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "トークン" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "アクセス用トークン" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "シークレット" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "HMACの共有秘密" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "メッセージ ID:" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "このメッセージの一意な識別子" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "ホスト" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "このメッセージを受信したホスト" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "ヘッダー" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "このメッセージのヘッダー" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "本文" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "メッセージ本文" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "このメッセージを受信したエンドポイント" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "作業内容" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "このメッセージに関する作業は終わったのですか?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Id" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "タイトル" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "リンク" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "公開済み" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "投稿者" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "概要" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "既読" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "このニュースは読まれましたか?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "画像ファイル" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "この画像の対象モデルタイプ" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "この画像の対象モデルID" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "カスタムユニット" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "単位記号は一意でなければなりません。" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "ユニット名は有効な識別子でなければなりません。" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "ユニット名" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "シンボル" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "オプションの単位記号" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "定義" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "ユニットの定義" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "添付ファイル" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "ファイルがありません" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "外部リンクが見つかりません。" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "モデルタイプ" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "画像の対象モデルタイプ" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "添付ファイルを選択" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "コメント:" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "添付コメント" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "アップロード日" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "ファイルがアップロードされた日付" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "ファイルサイズ" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "ファイルサイズ(バイト" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "添付ファイルに指定されたモデルタイプが無効です" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "カスタムステート" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "カスタムステート" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "リファレンス・ステータス・セット" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "このカスタム状態で拡張されたステータスセット" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "論理キー" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "ビジネスロジックでこのカスタムステートに等しいステート論理キー" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "値" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "モデルのデータベースに保存される数値" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "都道府県名" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "ラベル" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "フロントエンドに表示されるラベル" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "色" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "フロントエンドに表示される色" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "モデル" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "この状態が関連するモデル" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "モデルを選択する必要があります" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "キーを選択する必要があります。" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "論理キーを選択する必要があります。" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "キーは論理キーと異なる必要があります。" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "有効な参照ステータスクラスが提供されなければならない" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "キーは、参照ステータスの論理キーとは異なる必要があります。" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "論理キーは、参照ステータスの論理キーに含まれていなければなりません。" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "リファレンス・ステータスの名前とは異なっていなければならない。" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "セレクションリスト" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "セレクション・リスト" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "選択リストの名前" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "選択リストの説明" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "ロック中" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "この選択リストはロックされていますか?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "このセレクションリストは使えますか?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "ソースプラグイン" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "選択リストを提供するプラグイン" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "ソースストリング" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "このリストに使用されているソースを示すオプションの文字列" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "デフォルトエントリー" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "この選択リストのデフォルト項目" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "作成日" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "選択リストが作成された日時" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "最終更新" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "選択リストが最後に更新された日時" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "セレクションリスト入力" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "セレクションリスト" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "このエントリーが属する選択リスト" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "選択リストエントリーの値" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "選択リスト項目のラベル" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "選択リスト項目の説明" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "この選択リストはアクティブですか?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "パラメータテンプレート" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "パラメータテンプレート" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "チェックボックスのパラメータに単位を指定することはできません。" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "チェックボックスパラメータに選択肢を持たせることはできません。" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "選択肢はユニークでなければなりません" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "パラメータ・テンプレート名は一意でなければなりません。" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "このパラメータテンプレートにおける対象モデルタイプ" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "パラメータ名" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "単位" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "このパラメータの物理単位" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "パラメータの説明" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "チェックボックス" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "このパラメータはチェックボックスですか?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "選択肢" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "このパラメータの有効な選択肢(カンマ区切り)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "このパラメータの選択リスト" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "有効" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "このパラメータテンプレートは有効ですか?" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "パラメータ" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "パラメータ" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "パラメータ値の選択が無効" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "パラメータに対して無効なモデルタイプが指定されています" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "モデルID" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "このパラメータの対象となるモデルのID" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "テンプレート" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "パラメータテンプレート" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "データ" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "パラメータ値" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "備考" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "任意のメモ欄" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "バーコードスキャン" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "バーコードデータ" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "バーコードをスキャンしたユーザー" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "タイムスタンプ" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "バーコードスキャンの日時" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "バーコードを処理したURLエンドポイント" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "コンテキスト" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "バーコードスキャンのコンテキストデータ" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "返答" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "バーコードスキャンによるレスポンスデータ" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "結果" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "バーコードスキャンは成功しましたか?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "エラーが発生しました" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: メールログの削除は保護されています。削除を許可するには、INVENTREE_PROTECT_EMAIL_LOG を False に設定してください。" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "メールメッセージ" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "メールメッセージ" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "発表されました" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "送信" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "失敗" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "配送済み" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "確認済み" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "インバウンド" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "アウトバウンド" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "返信なし" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "配送状況を記録" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "読み取りを記録" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "クリックを記録" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "グローバルID" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "このメッセージの識別子(外部システムから提供される場合があります)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "スレッドID" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "このメッセージスレッドの識別子(外部システムから提供される場合があります)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "スレッド" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "このメッセージに関連するスレッド" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "優先順位" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "メールのスレッド" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "メールのスレッド" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "キー" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "このスレッドの固有キー(スレッドを識別するために使用されます)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "このスレッドの固有識別子" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "内部を開始しました" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "このスレッドは内部で開始されたものですか?" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "スレッドが作成された日時" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "スレッドが最後に更新された日時" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} キャンセル" msgid "A order that is assigned to you was canceled" msgstr "あなたに割り当てられた注文がキャンセルされました。" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "受領品目" @@ -2392,1235 +2391,1243 @@ msgstr "環境変数によって設定が上書きされるかどうかを示し msgid "Override" msgstr "上書き" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "走行中" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "保留タスク" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "スケジュールされたタスク" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "失敗したタスク" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "タスクID" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ユニークなタスクID" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "ロック" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "ロック時間" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "タスク名" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "関数" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "機能名" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "引数" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "タスク引数" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "キーワード論争" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "タスクキーワード引数" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "ファイル名" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "モデルタイプ" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "このモデルの添付ファイルを作成または編集する権限がありません。" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "ユーザーは、このモデルのパラメータを作成または編集する権限がありません。" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "選択リストがロックされています" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "グループなし" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "サイトのURLが設定によってロックされています" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "再起動が必要" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "サーバーの再起動を必要とする設定が変更されました。" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "保留中の移行" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "保留中のデータベース移行数" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "有効な警告コード" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "有効な警告コードの辞書" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "インスタンスID" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "このInvenTreeインスタンスの一意識別子" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "アナウンスID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "サーバーのインスタンスIDをサーバーステータス情報でアナウンス(認証なし)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "サーバーインスタンス名" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "サーバーインスタンスの文字列記述子" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "インスタンス名を使用" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "タイトルバーにインスタンス名を使用" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "about`を表示する制限" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "スーパーユーザーにのみ `about` モーダルを表示します。" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "会社名" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "社内社名" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "ベース URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "サーバーインスタンスのベースURL" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "デフォルトの通貨" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "価格計算のベース通貨を選択" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "対応通貨" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "対応通貨コード一覧" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "通貨の更新間隔" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "為替レートの更新頻度 (ゼロに設定すると無効になります)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "日" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "通貨更新プラグイン" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "通貨更新プラグイン" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "URLからダウンロード" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "外部URLからの画像ダウンロードを許可する" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "ダウンロードサイズ制限" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "外部URL画像の最大サイズ" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "URLからのダウンロードに使用されるユーザーエージェント" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "外部URLから画像やファイルをダウンロードする際に使用するユーザーエージェントを上書きすることができます。" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "厳格なURLバリデーション" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "URL検証時にスキーマ指定を要求" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "更新チェック間隔" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "アップデートをチェックする頻度 (ゼロに設定すると無効になります)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "自動バックアップ" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "データベースとメディアファイルの自動バックアップ" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "自動バックアップ間隔" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "自動バックアップイベント間の日数を指定" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "タスク削除間隔" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "バックグラウンドタスクの結果は、指定した日数後に削除されます。" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "エラーログ削除間隔" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "エラーログは指定した日数後に削除されます。" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "通知削除間隔" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "ユーザー通知は指定された日数後に削除されます。" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "メール削除間隔" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "メールメッセージは、指定された日数が経過後に削除されます。" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "メールログの保護" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "メールログエントリの削除を防止します" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "バーコードサポート" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "ウェブインターフェイスでバーコードスキャナのサポートを有効にします。" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "店舗バーコード結果" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "バーコードスキャン結果をデータベースに保存" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "バーコードスキャン最大カウント" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "バーコードスキャン結果の最大保存数" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "バーコード入力遅延" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "バーコード入力処理遅延時間" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "バーコードウェブカメラサポート" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "ブラウザのウェブカメラでバーコードのスキャンが可能" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "バーコード表示データ" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "バーコードデータをテキストとしてブラウザに表示" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "バーコード生成プラグイン" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "内部バーコードデータ生成に使用するプラグイン" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "部品改訂" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "パートのリビジョンフィールドを有効にします。" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "アセンブリ改訂のみ" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "組立部品のみ修正可能" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "アセンブリからの削除を許可" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "アセンブリで使用されている部品の削除を許可します。" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "IPN 正規表現" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "部分IPNにマッチする正規表現パターン" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "IPNの重複を許可" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "複数のパートが同じIPNを共有できるようにします。" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "IPNの編集を許可" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "部品編集中にIPN値の変更を許可" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "部品表データのコピー" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "部品複製時にBOMデータをデフォルトでコピー" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "部品パラメータデータのコピー" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "部品複製時にデフォルトでパラメータデータをコピー" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "コピー部品テストデータ" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "部品複製時にテストデータをデフォルトでコピー" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "カテゴリー・パラメーター・テンプレートのコピー" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "部品作成時のカテゴリー・パラメーター・テンプレートのコピー" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "パーツはデフォルトのテンプレートです" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "コンポーネント" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "購入可能" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "販売可能" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "パーツはデフォルトで販売可能です" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "パーツはデフォルトで追跡可能です" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "バーチャル" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "パーツはデフォルトでバーチャル" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "関連部品を表示" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "部品の関連部品を表示" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "初期在庫データ" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "新規部品追加時に初期在庫を作成可能" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "サプライヤー初期データ" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "新しい部品を追加する際に、最初のサプライヤーデータを作成できるようにします。" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "部品名表示形式" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "部品名の表示形式" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "パーツカテゴリー デフォルトアイコン" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "パートカテゴリのデフォルトアイコン(空はアイコンがないことを意味します)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "価格の最小桁数" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "価格データのレンダリング時に表示する最小小数点以下の桁数" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "価格の小数点以下の桁数" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "価格データのレンダリング時に表示する小数点以下の桁数の最大値" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "サプライヤー価格の利用" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "全体的な価格計算にサプライヤーの価格破壊を含めること" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "購入履歴の上書き" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "過去の発注価格がサプライヤーの価格変動を上書き" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "ストックアイテム価格を使用" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "手動入力された在庫データから価格計算を行います。" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "在庫商品の価格設定年齢" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "この日数より古い在庫品を価格計算から除外します。" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "バリアント価格を使用" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "全体的な価格計算にバリアント価格を含む" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "アクティブバリアントのみ" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "バリアント価格の計算には、アクティブなバリアントパーツのみを使用します。" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "自動更新の価格設定" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "内部データが変更された際に、部品価格を自動的に更新します。" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "価格の再構築間隔" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "部品価格が自動的に更新されるまでの日数" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "社内価格" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "部品の内部価格の有効化" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "内部価格オーバーライド" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "利用可能な場合、内部価格は価格帯の計算より優先されます。" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "ラベル印刷の有効化" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "ウェブインターフェースからラベル印刷を有効にします。" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "ラベル画像DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "ラベル印刷プラグインに供給する画像ファイルを生成する際のDPI解像度" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "レポートの有効化" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "レポートの作成" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "デバッグモード" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "デバッグモードでのレポート生成(HTML出力)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "ログレポートエラー" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "レポート生成時に発生するエラーのログ" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "ページサイズ" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "PDFレポートのデフォルトのページサイズ" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "パラメータ単位の強制" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "単位が指定されている場合、パラメータ値は指定された単位に一致する必要があります。" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "世界的にユニークな連載" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "在庫品のシリアル番号はグローバルに一意でなければなりません。" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "枯渇在庫の削除" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "ストックアイテムが枯渇した場合のデフォルトの動作を決定します。" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "バッチコードテンプレート" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "ストックアイテムのデフォルトバッチコード生成用テンプレート" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "有効期限" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "在庫期限切れ機能の有効化" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "期限切れ株式の売却" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "期限切れ株式の売却を許可" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "在庫切れ時間" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "在庫品が期限切れとみなされるまでの日数" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "賞味期限切れ在庫の処理" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "期限切れの在庫を使用した建物の建築を許可" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "株式所有権" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "ストックロケーションとアイテムの所有権管理" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "在庫場所 デフォルトアイコン" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "在庫場所のデフォルトアイコン(空はアイコンがないことを意味します。)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "インストール済みストックアイテムの表示" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "ストックテーブルにインストールされたストックアイテムを表示" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "アイテム取り付けの際はBOMをチェック" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "親部品のBOMには、インストールされたストックアイテムが存在する必要があります。" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "在庫切れの転送を許可" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "在庫のないストックアイテムをストックロケーション間で移動可能" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "ビルド・オーダー参照パターン" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Build Order参照フィールドの生成に必要なパターン" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "責任ある所有者を要求" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "各注文には、責任ある所有者を指定する必要があります。" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "アクティブパートが必要" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "非稼動部品の製造オーダー作成を防止" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "ロックされた部分を要求" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "ロックされていない部品の製造オーダー作成を防止" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "有効なBOMが必要" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "BOMが検証されない限り、製造オーダーが作成されないようにします。" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "クローズド・チャイルド・オーダー" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "すべてのチャイルドオーダーが終了するまで、ビルドオーダーの完了を防止します。" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "外部ビルドオーダー" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "外部ビルドオーダー機能の有効化" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "テストがパスするまでブロック" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "必要なテストがすべて合格するまで、ビルド出力が完了しないようにします。" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "返品注文の有効化" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "ユーザーインターフェイスで返品注文機能を有効にします。" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "リターンオーダー参照パターン" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "返品注文参照フィールドの生成に必要なパターン" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "完了した返品注文の編集" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "注文完了後の返品注文の編集が可能" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "販売注文参照パターン" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "販売注文参照フィールドの生成に必要なパターン" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "販売注文のデフォルト出荷" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "販売注文でデフォルト出荷を作成可能" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "完了した販売注文の編集" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "出荷または完了後の販売注文の編集を許可します。" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "出荷には確認が必要です" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "商品が確認されるまで、出荷の完了をお控えください。" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "出荷された注文を完了としてマーク" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "出荷済みと表示された販売注文は、「出荷済み」ステータスを回避して自動的に完了します。" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "発注書参照パターン" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "発注書参照フィールドの生成に必要なパターン" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "完了した発注書の編集" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "出荷後または完了後の発注書の編集が可能" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "通貨の変換" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "在庫を受け取る際、商品価値を基準通貨に変換" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "自動発注" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "すべての品目を受領した時点で、発注書を完了として自動的にマーク" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "パスワード忘れ" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "ログインページでのパスワード忘れ防止機能の有効化" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "登録の有効化" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "ログインページでユーザーの自己登録を可能にします。" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "SSOの有効化" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "ログインページでSSOを有効化" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "SSO登録の有効化" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "ログインページでSSOによるユーザーの自己登録を可能にします。" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "SSOグループ同期の有効化" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "InvenTreeグループとIdPが提供するグループの同期を有効にします。" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "SSOグループキー" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "IdP が提供する groups claim 属性の名前。" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "SSOグループマップ" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "SSOグループからローカルのInvenTreeグループへのマッピング。ローカル・グループが存在しない場合は、作成されます。" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "SSO外のグループを削除" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "ユーザーに割り当てられたグループがIdPによってバックエンドされていない場合に削除するかどうか。この設定を無効にすると、セキュリティ上の問題が発生する可能性があります。" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "メールアドレスは必須です" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "サインアップ時にメールの入力を要求" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "SSOユーザーの自動入力" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "SSOアカウントデータからユーザー詳細を自動入力" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "メール2回" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "サインアップの際、ユーザーに2度メールを尋ねます。" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "パスワード2回" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "サインアップ時にパスワードを2回要求" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "許可ドメイン" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "特定のドメイン(@で始まるカンマ区切り)へのサインアップを制限します。" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "登録時のグループ" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "新規ユーザ登録時に割り当てられるグループ。SSOグループ同期が有効な場合、このグループはIdPからグループを割り当てられない場合にのみ設定されます。" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "MFAの実施" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "ユーザーは多要素セキュリティを使用する必要があります。" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "起動時にプラグインをチェック" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "起動時にすべてのプラグインがインストールされていることを確認 - コンテナ環境では有効にします。" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "プラグインのアップデートの確認" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "インストールされているプラグインのアップデートを定期的にチェックします。" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "URL統合の有効化" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "プラグインがURLルートを追加できるようにします" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "ナビゲーション統合の有効化" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "プラグインをナビゲーションに統合可能" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "アプリとの統合" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "プラグインを有効にしてアプリを追加" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "スケジュール統合の有効化" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "スケジュールタスクを実行するプラグインの有効化" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "イベント統合の有効化" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "プラグインが内部イベントに応答できるようにします。" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "インターフェース統合の有効化" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "プラグインがユーザー・インターフェースに統合できるようにします。" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "メール連携を有効にする" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "プラグインを有効にして、送信/受信メールを処理できるようにします" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "プロジェクトコードの有効化" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "プロジェクトを追跡するためのプロジェクトコードの有効化" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "過去の在庫数量および価値を記録する機能を有効にします" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "外部ロケーションを除く" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "自動引取期間" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "ユーザーのフルネームを表示" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "ユーザー名の代わりにフルネームを表示" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "ユーザープロファイルの表示" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "プロフィールページにユーザーのプロフィールを表示" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "テストステーションデータの有効化" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "テスト結果のテストステーションデータ収集の有効化" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "マシン ping を有効にする" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "登録されたマシンの状態を確認するため、定期的なpingタスクを有効にしてください" @@ -3965,346 +3972,346 @@ msgstr "パートはアクティブ" msgid "Manufacturer is Active" msgstr "メーカーはアクティブ" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "サプライヤーが活動中" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "内部はアクティブ" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "サプライヤーの活動" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "製造元" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "会社名" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "在庫あり" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "会社" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "会社概要" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "会社概要" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "ウェブサイト" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "会社ホームページURL" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "電話番号" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "連絡先電話番号" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "連絡先メールアドレス" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "お問い合わせ" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "連絡先" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "外部企業情報へのリンク" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "この会社は活動していますか?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "お客様" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "この会社に商品を販売していますか?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "サプライヤー" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "この会社から商品を購入しますか?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "メーカーは" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "この会社は部品を製造しているのですか?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "この会社で使用されるデフォルト通貨" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "納税者番号" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "法人税番号" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "住所" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "マイアカウント" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "会社を選択" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "住所" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "アドレスエントリを説明するタイトル" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "主な住所" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "プライマリアドレスに設定" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "1行目" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "丁目、番地、号など" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "2行目" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "建物名、部屋番号など" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "郵便番号" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "都市/地域" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "郵便番号 都市/地域" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "都道府県" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "都道府県" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "国" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "住所国" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "宅配便発送に関する注意事項" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "宅配便発送時の注意事項" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "社内出荷に関する注意事項" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "社内用出荷注意事項" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "住所情報へのリンク(外部)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "メーカー・パーツ" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "ベース部" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "部品を選択" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "メーカー選択" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "メーカー品番" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "外部メーカー部品リンク用URL" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "メーカー部品説明" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "パックユニットは、ベースユニットと互換性がある必要があります。" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "パック単位はゼロより大きくなければなりません。" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "リンクされたメーカー部品は、同じベース部品を参照する必要があります。" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "仕入先" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "サプライヤーを選択" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "サプライヤー在庫管理ユニット" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "このサプライヤーは活動していますか?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "メーカー部品の選択" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "外部サプライヤー部品リンク用URL" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "サプライヤーの部品説明" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "基本料金" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "ミニマムチャージ(例:仕入れ手数料)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "パッケージング" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "部品梱包" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "パック数量" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "1パックに供給される総量。単品の場合は空のままにしてください。" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "複数" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "複数注文" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "サプライヤーから入手可能な数量" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "空席状況更新" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "アベイラビリティ・データの最終更新日" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "サプライヤーの価格破壊" @@ -4316,7 +4323,7 @@ msgstr "このサプライヤーで使用されるデフォルト通貨" msgid "Company Name" msgstr "会社名" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "在庫あり" @@ -4452,7 +4459,7 @@ msgstr "対象モデルにフィールドが存在しない" msgid "Selected field is read-only" msgstr "選択されたフィールドは読み取り専用です。" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "インポートセッション" @@ -4464,31 +4471,31 @@ msgstr "フィールド" msgid "Column" msgstr "列" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "行インデックス" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "元の行データ" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "エラー" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "有効" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "既存の記録を更新するにはIDが必要です。" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "指定のIDで該当する記録は見つかりませんでした" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "無効なID形式が指定されました" @@ -4588,7 +4595,7 @@ msgstr "各ラベルの印刷部数" msgid "Connected" msgstr "接続済み" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "不明" @@ -4716,105 +4723,117 @@ msgstr "最大進捗" msgid "Maximum value for progress type, required if type=progress" msgstr "進行状況タイプの場合の最大値。type=progress の場合に必須です。" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "注文参照" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "並外れた" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "プロジェクトコード" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "作成者" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "作成前" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "の後に作成されました。" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "開始日あり" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "開始日 前" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "開始日 後" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "目標期日あり" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "目標期日" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "以降の目標日" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "価格" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "完成前" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "終了後" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "外部ビルドオーダー" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "注文" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "注文完了" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "内部パーツ" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "注文保留" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "完了" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "出荷あり" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "注文" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "注文" msgid "Sales Order" msgstr "セールスオーダー" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "合計金額" msgid "Total price for this order" msgstr "この注文の合計金額" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "注文通貨" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "この注文の通貨(会社のデフォルトを使用する場合は空白のままにしてください。)" @@ -4851,718 +4870,742 @@ msgstr "この注文の通貨(会社のデフォルトを使用する場合は msgid "This order is locked and cannot be modified" msgstr "この注文はロックされており、変更できません。" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "連絡先が選択した会社と一致しません" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "開始日は目標期日より前でなければなりません。" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "指定の会社と住所が一致しません" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "ご注文内容(任意)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "この注文のプロジェクトコードを選択してください。" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "外部ページへのリンク" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "開始日" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "本注文の開始予定日" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "終了日に達したら" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "お届け予定日この期日を過ぎますと延滞となります。" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "発行日" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "オーダー発行日" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "この注文を担当するユーザーまたはグループ" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "本注文に関する連絡先" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "本注文の会社住所" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "注文参照" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "ステータス" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "発注状況" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "注文元の会社" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "サプライヤー・リファレンス" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "サプライヤー注文参照コード" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "受信" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "注文完了日" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "目的地" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "入荷商品のお届け先" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "部品サプライヤーは、POサプライヤーと一致する必要があります。" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "品目が発注書と一致しません" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "行項目にリンクされた部品が不足しています" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "数量は正の数でなければなりません。" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "顧客" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "販売先" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "販売注文状況" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "お客様リファレンス" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "顧客注文参照コード" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "出荷日" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "出荷元" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "注文はすでに完了しています。" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "注文はすでにキャンセルされました" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "未完了の注文にのみ完了マークを付けることができます。" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "出荷に不備があるため、注文を完了できません。" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "割り当てに不備があるため、注文を完了できません。" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "不完全な項目があるため、注文を完了できません。" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "注文はロックされ、変更できません。" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "品目数量" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "行項目参照" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "項目" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "この行項目の目標期日(注文の目標期日を使用する場合は空白のままにしてください。)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "行項目の説明(オプション)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "この行の補足説明" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "単価" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "発注書項目" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "サプライヤーの部品はサプライヤーと一致しなければなりません。" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "ビルドオーダーは外部としてマークする必要があります" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "ビルドオーダーはアセンブリ部品にのみリンクできます" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "ビルドオーダーの部品は、ラインアイテムの部品と一致する必要があります。" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "サプライヤー" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "受信" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "受領品目数" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "購入金額" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "購入単価" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "本品目により完成する外部ビルドオーダー" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "発注書追加行" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "販売注文明細" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "販売可能な部品のみを販売オーダーに割り当てることができます。" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "セール価格" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "販売単価" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "発送済み" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "出荷数量" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "販売注文の出荷" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "配送先住所はお客様と一致している必要があります" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "こちらの発送先住所" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "出荷日" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "配達日" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "貨物の引渡日" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "チェック済み" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "この貨物をチェックしたユーザー" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "発送" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "出荷番号" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "追跡番号" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "貨物追跡情報" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "請求書番号" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "関連する請求書の参照番号" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "発送済み" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "出荷品目に割り当てられた在庫がありません" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "出荷は完了前に必ず確認が必要となります" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "セールスオーダー追加ライン" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "販売注文の割り当て" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "在庫アイテムが割り当てられていません" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "在庫品を別部品のラインに割り当てることはできません。" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "部品のないラインに在庫を割り当てることはできません。" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "割当数量が在庫数量を超えることはできません" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "割当数量はゼロより大きくなければなりません" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "シリアル化された在庫品の場合、数量は1でなければなりません。" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "販売注文と出荷が一致しません" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "出荷が販売注文と一致しません" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "ライン" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "販売注文の出荷参照" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "アイテム" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "割り当てるストックアイテムを選択" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "在庫割当数量の入力" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "リターンオーダー参照" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "返品元の会社" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "返品状況" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "返品注文項目" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "在庫品の指定が必要です。" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "返品数量が在庫数量を超える場合" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "返品数量はゼロより大きくなければなりません。" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "シリアル化されたストックアイテムの数量が無効です。" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "お客様から返品する商品を選択" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "受領日" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "転帰" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "この項目の成果" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "この品目の返品または修理に関連する費用" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "リターンオーダー追加ライン" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "注文ID" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "複製する注文のID" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "コピーライン" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "元の注文から行項目をコピー" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "余分な行をコピー" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "元の注文から余分な項目をコピー" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "コピーパラメータ" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "ラインアイテム" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "完成路線" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "重複した注文" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "この注文を複製するためのオプションを指定します。" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "無効なオーダーID" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "サプライヤー名" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "ご注文のキャンセルはできません。" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "未完了の行項目で注文を閉じることができます。" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "注文に不備がある場合" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "ご注文は受け付けておりません。" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "自動車価格" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "サプライヤーの部品データに基づいて購入価格を自動計算" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "購入価格通貨" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "アイテムのマージ" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "同じ品目、同じ仕向け地、同じ日付の品目を1つの品目に統合します。" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "内部部品番号" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "内部部品名" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "サプライヤー部品の指定が必要" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "注文書の指定が必要" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "サプライヤーは発注書と一致しなければなりません。" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "発注書はサプライヤーと一致している必要があります。" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "明細" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "受取商品の配送先選択" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "入荷在庫品のバッチコード入力" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有効期限" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "入荷在庫の有効期限の入力" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "入荷した在庫品のシリアル番号の入力" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "入荷在庫品の包装情報の上書き" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "在庫品の入荷に関する注意事項" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "バーコード" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "スキャンされたバーコード" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "バーコードはすでに使用されています" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "項目は必ずご記入ください。" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "デスティネーション・ロケーションを指定する必要があります。" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "バーコードの値は一意でなければなりません。" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "発送" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "完了した出荷" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "販売価格通貨" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "割当項目" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "出荷の詳細は記載されていません" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "ラインアイテムは、この注文に関連付けられていません。" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "数量は正数でなければなりません。" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "割り当てるシリアル番号を入力" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "出荷済み" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "この注文には出荷が関連付けられていません" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "以下のシリアル番号に該当するものは見つかりませんでした。" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "以下のシリアル番号はご利用いただけません。" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "返品注文項目" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "ラインアイテムが返品オーダーと一致しません" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "ラインアイテムはすでに受領済み" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "商品の受け取りは、進行中の注文に対してのみ可能です。" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "返品数量" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "ライン価格通貨" @@ -5598,146 +5641,146 @@ msgstr "返金" msgid "Reject" msgstr "拒否" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "期限切れ発注書" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "発注書{po}は現在期限切れです" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "期限切れ販売注文" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "セールスオーダー{so}は現在期限切れです。" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "期限切れ返品注文" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "リターンオーダー{ro}は現在期限切れです" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "スター付き" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "星の数で絞り込む" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "深さ" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "カテゴリの深さでフィルタリング" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "最多メンバーレベル" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "トップレベルカテゴリーによるフィルタリング" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "カスケード表示" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "フィルタリング結果にサブカテゴリーを含めることができます。" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "親" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "親カテゴリーによる絞り込み" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "指定したカテゴリの下にあるサブカテゴリを除外します。" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "実績あり" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "バリエーション?" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "改訂版" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "改定あり" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "BOM有効" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "カスケードカテゴリ" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "もし該当する場合には、指定されたカテゴリの子カテゴリ内のアイテムを含めてください。" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "数値カテゴリIDまたはリテラル'null'でフィルタリングしてください" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "組み立て部分はテスト可能" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "コンポーネント部分はテスト可能" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "用途" @@ -5750,7 +5793,7 @@ msgstr "パーツカテゴリ" msgid "Part Categories" msgstr "パーツカテゴリ" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "デフォルトの場所" @@ -5778,7 +5821,7 @@ msgstr "このカテゴリの部品のデフォルトキーワード" msgid "Icon" msgstr "アイコン" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "アイコン (オプション)" @@ -5799,7 +5842,7 @@ msgstr "初期値" msgid "Default Parameter Value" msgstr "パラメータのデフォルト値" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "パーツ" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "パートはそれ自体の改訂にはなりえません" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "すでにリビジョンとなっている部分のリビジョンを作成することはできません。" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "リビジョンコードの指定が必要" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "修正が許されるのは組立部品のみ" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "テンプレート部品のリビジョンを作成できません" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "親部品は同じテンプレートを指す必要があります。" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "このシリアル番号の在庫品はすでに存在します" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "パート設定でIPNの重複が許可されていません。" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "重複する部品リビジョンが既に存在します。" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "この名前、IPN、リビジョンを持つ部品は既に存在します。" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "部品を構造部品のカテゴリーに割り当てることはできません!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "部品名" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "テンプレート" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "この部品はテンプレート部品ですか?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "この部品は他の部品の変形ですか?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "変種" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "部品の説明(オプション)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "キーワード" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "検索結果での視認性を向上させる部分キーワード" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "パーツカテゴリ" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "即時支払通知" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "部品のリビジョンまたはバージョン番号" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "リビジョン" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "この部品は他の部品の改訂版ですか?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "改訂版" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "この商品は通常どこに保管されていますか?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "デフォルトの有効期限" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "この部品の在庫品の有効期限(日単位" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "最小在庫" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "最低許容在庫量" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "この部品の単位" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "この部品は他の部品から作ることができますか?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "この部品を使って他の部品を作ることはできますか?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "このパーツはユニークなアイテムの追跡が可能ですか?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "この部品にテスト結果を記録することはできますか?" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "この部品は外部のサプライヤーから購入できますか?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "この部品は顧客に販売できますか?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "この部分はアクティブですか?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "ロックされた部分は編集できません" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "これは、ソフトウェア製品やライセンスなどの仮想部品ですか?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "部品表の検証が完了しました" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "こちらの部品の部品表(BOM)は有効でしょうか?" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "BOMチェックサム" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "保存されたBOMのチェックサム" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "BOMチェック済み" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "BOMチェック日" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "作成ユーザー" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "この部分の責任者" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "複数販売" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "価格計算のキャッシュに使用される通貨" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "最小BOMコスト" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "構成部品の最低コスト" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "最大BOMコスト" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "構成部品の最大コスト" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "最低購入価格" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "過去の最低購入価額" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "最大購入費用" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "過去の最高購入価格" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "最低社内価格" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最低コスト" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "社内最高価格" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最大コスト" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "最低供給価格" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最低価格" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "サプライヤー最高価格" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最高価格" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "最小バリアントコスト" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "バリアントパーツの最小コストの計算" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "最大バリアントコスト" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "バリアント部品の最大コストの計算" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "最低料金" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "最低コストのオーバーライド" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "最大コスト" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "最大コストのオーバーライド" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "総合的な最小コストの計算" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "総合最大コストの計算" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "最低販売価格" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "価格破壊に基づく最低販売価格" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "最高販売価格" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "価格破壊に基づく最高販売価格" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "最低販売価格" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "過去の最低売却価格" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "最大販売価格" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "過去の最高売却価格" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "ストックテイク用部品" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "個数" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "棚卸時の個別在庫数" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "ストックテイク時の在庫可能量" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "日付" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "ストックテイク実施日" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "最低在庫コスト" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "手元在庫の最低見積原価" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "最大在庫コスト" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "手元在庫の最大見積原価" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "パーツセール価格" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "部品試験テンプレート" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "無効なテンプレート名 - 英数字を1文字以上含む必要があります。" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "テストテンプレートは、テスト可能な部分に対してのみ作成できます。" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "同じキーを持つテスト・テンプレートがパートに既に存在します。" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "試験名" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "テストの名前を入力します。" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "テストキー" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "テストの簡易キー" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "試験内容" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "このテストの説明を入力してください。" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "このテストは有効ですか?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "必須" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "このテストは合格するために必要ですか?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "価値が必要" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "このテストは、テスト結果を追加する際に値を必要としますか?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "アタッチメントが必要" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "この試験では、試験結果を追加する際にファイルの添付が必要ですか。" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "このテストで有効な選択肢(カンマ区切り)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOMアイテムは変更できません - アセンブリがロックされています。" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM アイテムは変更できません - バリアントアセンブリがロックされています。" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "親部品を選択" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "サブパート" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "BOMで使用する部品を選択" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "このBOMアイテムのBOM数量" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "この部品表はオプションです。" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "このBOMアイテムは消耗品です。" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "設定数量" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "ビルドに必要な追加の必要量(セットアップ時の損失を考慮した分)" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "歩留まり損失" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "ビルドにおける推定歩留まり率(0~100%で表されます)" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "丸め倍数" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "必要な生産数量を、この値の倍数に切り上げてください。" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "BOMアイテムリファレンス" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "BOMアイテムノート" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "チェックサムi" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "BOMラインのチェックサム" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "検証済み" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "このBOMアイテムは検証済みです" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "継承" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "この BOM アイテムは、バリアントパーツの BOM に継承されます。" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "このBOMアイテムには、バリアントパーツのストックアイテムを使用できます。" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "数量は追跡可能な部品の場合、整数値でなければなりません。" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "サブパーツの指定が必要" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "BOMアイテム代替" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "代用部品はマスター部品と同じにすることはできません。" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "親BOMアイテム" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "代用部品" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "パート #1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "パート #2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "関連部品を選択" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "この関係について" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "部品とそれ自身との間に部品関係を作ることはできません。" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "重複する関係が既に存在します。" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "親カテゴリ" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "親部品カテゴリー" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "サブカテゴリ" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "結果" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "このテンプレートに対して記録された結果の数" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "この在庫商品の購入通貨" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "ファイルが画像ではありません" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "オリジナルパート" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "複製する元の部品を選択" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "コピー画像" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "元の部分から画像をコピー" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "コピーBOM" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "元の部品から部品表をコピー" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "コピーパラメータ" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "元の部品からパラメータデータをコピー" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "コピーノート" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "元のパートからメモをコピー" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "コピーテスト" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "元の部品からテスト用テンプレートをコピーしてください" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "初期在庫量" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "この部品の初期在庫数量を指定します。数量が0の場合、在庫は追加されません。" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "初期在庫場所" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "この部品の初期在庫場所を指定してください。" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "サプライヤーを選択してください。" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "メーカーを選択してください。" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "メーカー品番" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "選択された企業は有効なサプライヤーではありません。" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "選択された会社は有効な製造業者ではありません。" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "このMPNに一致するメーカー部品はすでに存在します。" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "このSKUに一致するサプライヤー部品は既に存在します。" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "カテゴリ名" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "建物" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "現在生産中の当該部品の数量" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "この部品の予定生産数量" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "在庫商品" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "リビジョン" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "総在庫" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "未割当株式" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "バリアントストック" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "重複部分" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "別のパートから初期データをコピー" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "初期在庫" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "初期在庫数で部品を作成" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "サプライヤー情報" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "この部品の初期サプライヤー情報を追加します。" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "コピーカテゴリパラメータ" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "選択したパーツカテゴリーからパラメータテンプレートをコピー" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "既存イメージ" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "既存の部品画像のファイル名" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "画像ファイルが存在しません" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "部品表全体の検証" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "ビルド" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "ビルドオーダーに必要なもの" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "ビルドオーダーに割り当てられました" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "セールスオーダーに必要なもの" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "セールスオーダーに割り当てられました" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "最小価格" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "最低価格の計算値の上書き" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "最低価格通貨" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "最大価格" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "最高価格の計算値を上書き" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "最高価格通貨" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "更新" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "この部品の価格を更新" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "提供された通貨から{default_currency}に変換できませんでした。" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "最低価格は最高価格を超えてはなりません。" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "最高価格は最低価格を下回ってはなりません。" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "親アセンブリを選択" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "構成部品の選択" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "BOMをコピーする部品を選択します。" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "既存データの削除" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "コピー前に既存のBOMアイテムを削除" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "インクルード継承" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "テンプレート化された部品から継承されたBOM項目を含めます。" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "無効な行をスキップ" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "無効な行をスキップするには、このオプションを有効にします。" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "コピー代用部品" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOMアイテムの重複時に代替部品をコピー" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "在庫不足通知" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "{part.name}の在庫が設定された最低レベルを下回りました。" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "在庫切れ通知" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "在庫品1点について、有効期限が近づいています。" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "在庫品のうち、{item_count}点の商品がまもなく期限切れとなります。" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "有効期限なし" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "期限切れ {abs(days_diff)} 日前" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "本日が期限となります" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} 日" @@ -7580,64 +7620,77 @@ msgstr "TMEバーコードのスキャンをサポートします。" msgid "The Supplier which acts as 'TME'" msgstr "「TME」として活動するサプライヤー" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "スタッフユーザーのみがプラグインを管理できます" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "プラグインのインストールが無効" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "プラグインのインストールに成功しました" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "{path} にプラグインをインストール" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "プラグインがレジストリに見つかりませんでした" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "プラグインはパッケージ化されていません" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "プラグインパッケージ名が見つかりません" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "スタッフユーザーのみがプラグインを管理できます" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "プラグインのアンインストールが無効" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "プラグインがアクティブなため、アンインストールできません。" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "このプラグインは必須のため、アンインストールすることはできません。" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "このプラグインはサンプルプラグインのため、アンインストールすることはできません。" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "プラグインは組み込みプラグインのため、アンインストールすることはできません。" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "プラグインがインストールされていません" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "プラグインのインストールが見つかりません" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "プラグインのアンインストールに成功" @@ -7689,21 +7742,21 @@ msgstr "パッケージプラグイン" msgid "Plugin" msgstr "プラグイン" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "著者は見つかりませんでした" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "プラグイン'{p}'は現在のInvenTreeバージョン{v}と互換性がありません。" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "プラグインには少なくともバージョン {v} が必要です。" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "プラグインに必要なバージョンは最大で{v}です。" @@ -7884,51 +7937,51 @@ msgstr "設置未確認" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "フルリロード" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "プラグインレジストリのフルリロードを実行します。" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "強制リロード" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "プラグイン・レジストリがすでにロードされていても、強制的に再ロードします。" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "プラグインの収集" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "プラグインの収集とレジストリへの追加" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "プラグインを有効化" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "このプラグインを有効化します" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "必須プラグインは無効化できません" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "設定の削除" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "データベースからプラグイン設定を削除します" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "この設定が適用されるユーザー" @@ -8190,7 +8243,7 @@ msgstr "合計" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "シリアル番号" @@ -8215,7 +8268,7 @@ msgstr "在庫品テストレポート" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "設置項目" @@ -8248,184 +8301,196 @@ msgstr "結果なし(必須)" msgid "No result" msgstr "何も結果はありません" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "アセットファイルが存在しません" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "画像ファイルが見つかりません" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "part_image タグには Part インスタンスが必要です。" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image タグには Company インスタンスが必要です。" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "場所の深さによる絞り込み" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "トップレベルのロケーションによるフィルタリング" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "フィルタリング結果にサブロケーションを含めることができます。" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "親の位置" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "親の所在地でフィルタリング" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "部品名(大文字・小文字を区別しません)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "パート名に含まれるもの(大文字・小文字を区別しません)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "部品名(正規表現)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "パートIPN(大文字と小文字を区別しません)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "パートIPNに含まれるもの(大文字と小文字は区別されません)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "パートIPN(正規表現)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "最小在庫" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "最大在庫" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "ステータスコード" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "外部ロケーション" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "ビルド・オーダーで消費" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "その他在庫品に装着" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "パートツリー" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "更新前" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "更新後" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "ストックテイク前" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "ストックテイク後" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "有効期限" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "有効期限" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "期限失効" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "そのアイテムおよびそのすべての子孫を除外するためのStockItemのプライマリキーをご提供ください。" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "カスケードの所在地" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "もし真であれば、指定された場所の子要素に含まれる項目を含めます" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "数値のロケーションID、またはリテラル文字列の「null」でフィルタリングしてください。" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "数量が必要です" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "有効な部品を供給する必要があります。" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "指定されたサプライヤの部品が存在しません。" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "サプライヤー部品にはパックサイズが定義されていますが、use_pack_sizeフラグが設定されていません。" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "追跡不可能な部品については、シリアル番号は提供できません。" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "組み込み済みを含める" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "もし真であれば、指定した在庫アイテムの中に組み込まれている構成部品のテスト結果を含める" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "数値による在庫品IDでの絞り込み" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "ID {id} の在庫品は存在しません" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "ストックロケーションの種類" msgid "Default icon for all locations that have no icon set (optional)" msgstr "アイコンが設定されていないすべての場所のデフォルトアイコン (オプション)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "ストックロケーション" @@ -8449,11 +8514,11 @@ msgstr "ストックロケーション" msgid "Stock Locations" msgstr "在庫場所" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "所有者" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "所有者を選択" @@ -8481,274 +8546,274 @@ msgstr "このロケーションのロケーションタイプ" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "いくつかのストックアイテムがすでにストックロケーションに配置されているため、このストックロケーションを構造化することはできません!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field}は存在しません" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "部品の指定が必要" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "在庫品は、構造的な在庫場所に配置することはできません!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "仮想部品にストックアイテムを作成できません" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "パートタイプ('{self.supplier_part.part}')は{self.part}でなければなりません。" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "シリアル番号のある商品は数量が1でなければなりません。" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "数量が1以上の場合、シリアル番号は設定できません。" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "アイテムはそれ自身に属することはできません" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "is_building=Trueの場合、アイテムはビルド・リファレンスを持っていなければならない。" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "ビルド参照が同じ部品オブジェクトを指していません。" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "親株式" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "ベース部" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "この在庫品に一致するサプライヤー部品を選択してください" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "この在庫品はどこにありますか?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "この在庫品は以下の梱包で保管されています。" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "設置場所" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "このアイテムは他のアイテムにインストールされていますか?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "この商品のシリアル番号" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "このストックアイテムのバッチコード" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "在庫数" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "ソースビルド" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "このストックアイテムのビルド" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "消費者" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "このストックアイテムを消費したビルドオーダー" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "発注元" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "この在庫商品の購入注文" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "販売先オーダー" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "在庫品の有効期限。この日を過ぎると在庫は期限切れとなります。" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "枯渇時に削除" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "在庫がなくなったら、このストックアイテムを削除します。" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "購入時の単品購入価格" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "パートに変換" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "数量が在庫数を超えています" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "部品が追跡可能に設定されていません" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "数量は整数でなければなりません。" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "数量は在庫数 ({self.quantity}) を超えてはなりません。" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "シリアル番号はリストとして提供されなければなりません" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "数量がシリアル番号と一致しません" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "構造上ロケーションに在庫を割り当てることはできません" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "テストテンプレートが存在しません" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "在庫商品が販売注文に割り当てられました" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "ストックアイテムが他のアイテムに装着されている場合" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "在庫商品には他の商品が含まれています。" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "在庫商品が顧客に割り当てられました" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "在庫品は現在生産中です。" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "連番在庫の統合はできません" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "在庫品の重複" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "在庫品目は同じ部品を参照してください。" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "在庫品は同じサプライヤーの部品を参照する必要があります。" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "在庫状況コードが一致していること" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "在庫がないため移動できません。" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "ストックアイテムのトラッキング" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "記入上の注意" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "在庫品テスト結果" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "このテストには値を指定する必要があります。" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "このテストには添付ファイルをアップロードする必要があります。" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "このテストでは無効な値です。" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "試験結果" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "テスト出力値" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "試験結果添付" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "テストノート" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "テストステーション" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "試験が実施された試験ステーションの識別子。" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "開始" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "テスト開始のタイムスタンプ" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "修了済み" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "テスト終了のタイムスタンプ" @@ -8792,246 +8857,246 @@ msgstr "シリアル番号を生成する部品を選択します。" msgid "Quantity of serial numbers to generate" msgstr "生成するシリアル番号の数" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "この結果のテストテンプレート" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "この部品に該当するテストが見つかりませんでした" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "テンプレートIDまたはテスト名が必要です。" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "試験終了時刻を試験開始時刻より早くすることはできません。" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "親アイテム" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "親株式" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "数量はパック数です。" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "パッケージサイズを使用" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "新しい商品のシリアル番号の入力" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "サプライヤー品番" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "期限切れ" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "子供用品" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "追跡項目" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "この在庫品の購入価格、単位またはパックあたり" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "シリアル化するストックアイテムの数を入力" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "在庫品目がしていされていません" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "数量は在庫数 ({q}) を超えてはなりません。" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "仕向け地" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "この部品にシリアル番号を割り当てることはできません" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "シリアル番号が既に存在します" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "インストールするストックアイテムを選択" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "設置数量" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "インストールするアイテムの数量を入力してください。" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "取引メモの追加(オプション)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "設置数量は1台以上" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "在庫がありません" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "選択した部品が部品表にない" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "設置する数量は、利用可能な数量を超えてはなりません。" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "アンインストール先の場所" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "在庫品を変換する部品を選択" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "選択された部分は、変換のための有効なオプションではありません。" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "SupplierPartが割り当てられている在庫品を変換できません。" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "在庫商品ステータスコード" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "ステータスを変更するストックアイテムを選択" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "ストックアイテムが選択されていません" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "サブロケーション" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "親株式所在地" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "パーツは販売可能でなければなりません" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "商品が販売オーダーに割り当てられています。" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "アイテムがビルドオーダーに割り当てられています。" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "在庫アイテムを割り当てるお客様" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "選択された企業は顧客ではありません" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "株式譲渡に関する注意事項" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "在庫品のリストが必要です。" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "株式併合に関する注意事項" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "不一致のサプライヤーを許可" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "異なるサプライヤの部品を持つ在庫品目をマージできるようにします。" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "不一致の状態を許可" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "異なるステータスコードを持つストックアイテムをマージすることができます。" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "少なくとも2つのストックアイテムを提供する必要があります。" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "変化なし" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "StockItem 主キー値" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "在庫がありません" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "在庫品目は既に在庫にあります" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "数量は負の数であってはなりません。" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "株式取引に関する注記" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "既存の在庫に統合します" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "可能なら、返品された商品を既存の在庫商品に統合してください" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "次のシリアル番号" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "以前のシリアル番号" @@ -9537,59 +9602,75 @@ msgstr "ユーザーの姓" msgid "Email address of the user" msgstr "ユーザーのメールアドレス" -#: users/serializers.py:309 -msgid "Staff" -msgstr "スタッフ" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "このユーザーにはスタッフ権限がありますか?" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "スーパーユーザー" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "このユーザーはスーパーユーザーですか?" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "このユーザーアカウントはアクティブですか" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "このフィールドを調整できるのはスーパーユーザーのみです。" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "パスワード" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "ユーザーのパスワード" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "警告を上書きします" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "パスワードルールに関する警告を無効にする" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "ユーザーを作成する権限がありません" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "アカウントが作成されました" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "パスワードリセット機能を使ってログインしてください" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "InvenTreeへようこそ" diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po index f34b545118..7d3e927fe8 100644 --- a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "이 모델을 볼 수 있는 권한이 없습니다." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -112,13 +104,13 @@ msgstr "날짜 입력" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "메모" @@ -131,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "연결 오류" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "이미지 크기가 너무 큽니다!" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +215,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "이메일" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "이름" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "설명" msgid "Description (optional)" msgstr "설명 (선택 사항)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "" @@ -313,75 +321,66 @@ msgstr "" msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "서버 오류" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "유효하지 않은 값" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "중국어 (간체)" msgid "Chinese (Traditional)" msgstr "중국어 (번체)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "분류" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "나에게 할당 됨" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "최소 날짜" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "최대 날짜" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "소모품" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "선택사항" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "수량" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "시리얼 번호 (일련번호)" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po index cdd58ce699..971620c0c8 100644 --- a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API galinis taškas nerastas" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Masiniam veiksmui turi būti pateiktas elementų arba filtrų sąrašas" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Elementai turi būti pateikti kaip sąrašas" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Pateiktas neteisingas elementų sąrašas" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "\"Filtrai turi būti pateikti kaip žodynas" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Pateikti neteisingi filtrai" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Filtras „all“ gali būti naudojamas tik su reikšme „true“" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Nė vienas elementas neatitinka pateiktų kriterijų" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Vartotojas neturi teisių peržiūrėti šio modelio" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nepavyko konvertuoti {original} į {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Pateiktas neteisingas kiekis" @@ -112,13 +104,13 @@ msgstr "Įveskite datą" msgid "Invalid decimal value" msgstr "Neteisinga dešimtainė reikšmė" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Pastabos" @@ -131,75 +123,91 @@ msgstr "Reikšmė „{name}“ neatitinka šablono formato" msgid "Provided value does not match required pattern: " msgstr "Pateikta reikšmė neatitinka reikalaujamo šablono: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Negalima iš karto susieti daugiau nei 1000 elementų" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Nepateiktas serijos numeris" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Pasikartojantis serijinis numeris" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Neteisinga grupė: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Grupės {group} kiekis viršija leistiną kiekį ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Serijos numerių nerasta" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Pašalinkite HTML žymes iš šios reikšmės" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Duomenyse yra draudžiamo „markdown“ turinio" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Ryšio klaida" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serveris grąžino netinkamą būsenos kodą" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Įvyko išimtis" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serveris grąžino neteisingą „Content-Length“ reikšmę" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Paveikslėlio dydis per didelis" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Paveikslėlio atsisiuntimas viršijo maksimalų leistiną dydį" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Nutolęs serveris grąžino tuščią atsakymą" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Nurodytas URL nėra tinkamas paveikslėlio failas" @@ -207,11 +215,11 @@ msgstr "Nurodytas URL nėra tinkamas paveikslėlio failas" msgid "Log in to the app" msgstr "Prisijungti prie programos" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "El. paštas" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Prieš atliekant bet kokius veiksmus, privalote įjungti dviejų veiksnių autentifikavimą." @@ -259,18 +267,18 @@ msgstr "Nuorodos numeris per didelis" msgid "Invalid choice" msgstr "Neteisingas pasirinkimas" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Pavadinimas" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Aprašymas" msgid "Description (optional)" msgstr "Aprašymas (neprivalomas)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Kelias" @@ -313,75 +321,66 @@ msgstr "Unikali brūkšninio kodo duomenų maiša\"" msgid "Existing barcode found" msgstr "Rastas esamas brūkšninis kodas" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Užduoties klaida" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Foninė užduotis '{f}' nepavyko po {n} bandymų" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverio klaida" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Serveris užfiksavo klaidą." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Paveikslėlis" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Turi būti teisingas skaičius" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valiuta" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Pasirinkite valiutą iš galimų variantų" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Neteisinga reikšmė" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Nutolęs paveikslėlis" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "Nutolusio paveikslėlio failo URL" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Paveikslėlių atsisiuntimas iš nutolusio URL neįjungtas" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Nepavyko atsisiųsti paveikslėlio iš nutolusio URL" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Kinų (supaprastinta)" msgid "Chinese (Traditional)" msgstr "Kinų (tradicinė)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "Neteisingas fizinis vienetas" msgid "Not a valid currency code" msgstr "Netinkamas valiutos kodas" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Užsakymo būsena" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Pirminė gamyba" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Įtraukti variantus" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Įtraukti variantus" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Įtraukti variantus" msgid "Part" msgstr "Detalė" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategorija" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Ankstesnė gamyba" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Priskirta man" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Priskirta" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Sukurta prieš" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Sukurta po" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Turi pradžios datą" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Pradžios data prieš" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Pradžios data po" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Turi tikslinę datą" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Tikslinė data prieš" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Tikslinė data po" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Užbaigta prieš" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Užbaigta po" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Minimali data" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Maksimali data" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Neįtraukti medžio struktūros" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Prieš ištrinant gamybą, ji turi būti atšaukta" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Sunaudojama" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Pasirinktinai" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Surinkimas" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Sekama" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Testuojama" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Liko neįvykdytų užsakymų" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Priskirta" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Prieinama" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Užsakyta" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Gamybos užsakymas" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Vieta" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Gamybos užsakymai" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Surinkimo BOM nėra patvirtintas" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Negalima sukurti gamybos užsakymo neaktyviai detalei" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Negalima sukurti gamybos užsakymo atrakintai detalei" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Turi būti nurodytas atsakingas vartotojas arba grupė" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Gamybos užsakymo detalės keisti negalima" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Tikslinė data turi būti po pradžios datos" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Gamybos užsakymo nuoroda" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Gamybos užsakymo nuoroda" msgid "Reference" msgstr "Nuoroda" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Trumpas gamybos aprašymas (neprivalomas)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Pasirinkite detalę gamybai" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Pardavimo užsakymo nuoroda" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Šaltinio vieta" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Pasirinkite vietą atsargoms paimti šiai gamybai (palikite tuščią, jei tinka bet kuri vieta)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Paskirties vieta" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Pasirinkite vietą, kur bus laikomos užbaigtos prekės" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Gamybos kiekis" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Atsargų kiekis, kurias reikia pagaminti" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Užbaigtos prekės" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Užbaigtų atsargų elementų skaičius" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Gamybos būsena" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Gamybos būsenos kodas" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Partijos kodas" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Šios gamybos partijos kodas" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Sukūrimo data" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Gamybos pradžios data" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Planuojama šio gamybos užsakymo pradžios data" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Tikslinė užbaigimo data" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Planuojama gamybos pabaigos data. Po šios datos gamyba bus pavėluota." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Užbaigimo data" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "Užbaigė" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Išdavė" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Vartotojas, kuris išdavė šį gamybos užsakymą" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Atsakingas" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Vartotojas ar grupė, atsakinga už šį gamybos užsakymą" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Išorinė nuoroda" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Nuoroda į išorinį URL" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Gamybos prioritetas" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Šio gamybos užsakymo prioritetas" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Projekto kodas" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Šio gamybos užsakymo projekto kodas" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Nepavyko perduoti užduoties, kad būtų atlikti gamybos paskirstymai" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Gamybos užsakymas {build} užbaigtas" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Gamybos užsakymas užbaigtas" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Sekamoms detalėms būtina nurodyti serijos numerius" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nepateiktas gamybos rezultatas" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Gamybos rezultatas jau užbaigtas" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Gamybos rezultatas neatitinka gamybos užsakymo" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Kiekis turi būti didesnis nei nulis" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Kiekis negali viršyti rezultato kiekio" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Gamybos rezultatas {serial} nepraėjo visų privalomų testų" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Gamybos užsakymo eilutės įrašas" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Gamybos objektas" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Gamybos objektas" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Kiekis" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Reikalingas kiekis gamybos užsakymui" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Gamybos elementas turi nurodyti rezultatą, nes pagrindinė detalė pažymėta kaip sekama" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Pasirinktas atsargų elementas neatitinka BOM eilutės" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Atsargoms su serijos numeriais kiekis turi būti 1" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Priskirtas kiekis ({q}) negali viršyti galimo atsargų kiekio ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Atsargų elementas per daug paskirstytas" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Atsargų elementas" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Šaltinio atsargų elementas" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Atsargų kiekis, skirtas paskirstyti į gamybą" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Įdiegti į" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Paskirties atsargų elementas" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Gamybos lygis" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Detalės pavadinimas" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Gamybos rezultatas" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Gamybos rezultatas neatitinka pirminės gamybos" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Rezultato detalė neatitinka gamybos užsakymo detalės" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Šis gamybos rezultatas jau užbaigtas" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Šis gamybos rezultatas nėra visiškai paskirstytas" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Įveskite kiekį gamybos rezultatui" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Sekamoms detalėms reikalingas sveikasis kiekis" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Reikalingas sveikasis kiekis, nes komplektavimo žiniaraštyje yra sekamų detalių" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Serijos numeriai" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Įveskite serijos numerius gamybos rezultatams" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Atsargų vieta gamybos rezultatams" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Automatiškai priskirti serijos numerius" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatiškai priskirti reikalingas prekes su atitinkančiais serijos numeriais" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Šie serijos numeriai jau egzistuoja arba yra neteisingi" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Turi būti pateiktas gamybos rezultatų sąrašas" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Atsargų vieta brokuotiems rezultatams" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Atmesti priskyrimus" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Atmesti visus atsargų priskyrimus brokuotiems rezultatams" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Priežastis, dėl kurios gamybos rezultatas(-ai) buvo nurašytas(-i)" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Vieta, kur laikomi užbaigti gamybos rezultatai" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Priimti nepilną priskyrimą" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Užbaigti rezultatus, net jei atsargos dar nėra pilnai priskirtos" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Sunaudoti priskirtas atsargas" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Sunaudoti bet kokias šiai gamybai jau priskirtas atsargas" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Pašalinti nebaigtus rezultatus" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Ištrinti visus nebaigtus gamybos rezultatus" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Neleidžiama" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Priimti kaip sunaudotą šio gamybos užsakymo metu" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Panaikinkite priskyrimus prieš užbaigiant šį gamybos užsakymą" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Per daug paskirstytos atsargos" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Kaip norite elgtis su papildomai šiam gamybos užsakymui priskirtomis atsargomis" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Kai kurios atsargos paskirstytos per daug" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Priimti nepriskirtą" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Priimti, kad atsargos nebuvo visiškai priskirtos šiam gamybos užsakymui" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Reikalingos atsargos nėra visiškai priskirtos" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Priimti nepilną" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Priimti, kad ne visi reikalingi gamybos rezultatai buvo užbaigti" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Reikalingas gamybos kiekis nebuvo užbaigtas" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Gamybos užsakymas turi nebaigtų antrinių gamybų" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Gamybos užsakymas turi būti gamybos būsenoje" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Gamybos užsakymas turi nebaigtų rezultatų" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Gamybos eilutė" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Gamybos rezultatas" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Gamybos rezultatas turi būti susietas su ta pačia gamyba" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Gamybos eilutės įrašas" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part turi būti ta pati detalė kaip ir gamybos užsakyme" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Prekė turi būti atsargose" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Viršytas prieinamas kiekis ({q})" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Sekamų detalių priskyrymui turi būti nurodytas gamybos rezultatas" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Negalima nurodyti gamybos rezultato nesekamoms detalėms" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Turi būti pateikti paskirstymo elementai" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Atsargų vieta, iš kurios bus imamos detalės (palikite tuščią, jei tinka bet kuri vieta)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Neįtraukti vietos" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Neįtraukti atsargų iš šios pasirinktos vietos" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Keičiamos atsargos" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Atsargos iš skirtingų vietų gali būti naudojamos pakaitomis" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Pakaitinės atsargos" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Leisti priskirti pakaitines detales" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Pasirenkami elementai" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Priskirti papildomus BOM elementus gamybos užsakymui" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Nepavyko paleisti automatinio paskirstymo užduoties" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "BOM nuoroda" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "BOM detalės ID" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "BOM detalės pavadinimas" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Gamyba" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Tiekėjo detalė" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Priskirtas kiekis" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Gamybos nuoroda" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Detalės kategorijos pavadinimas" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Sekama" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Paveldėta" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Leisti variantus" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOM elementas" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Gamyboje" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Išorinės atsargos" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Prieinamos atsargos" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Prieinamos pakaitinės atsargos" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Prieinamos variantų atsargos" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "Sulaikyta" msgid "Cancelled" msgstr "Atšaukta" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Užbaigta" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Atsargos, reikalingos gamybos užsakymui" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Vėluojantis gamybos užsakymas" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Gamybos užsakymas {bo} dabar vėluoja" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "Yra nuoroda" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "Yra failas" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Vartotojas neturi teisės ištrinti šių priedų" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Vartotojas neturi teisės ištrinti šio priedo" @@ -1555,794 +1554,794 @@ msgstr "Nėra papildinio" msgid "Project Code Label" msgstr "Projekto kodo etiketė" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Atnaujinta" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Paskutinio atnaujinimo laiko žymė" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Unikalus projekto kodas" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Projekto aprašymas" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Vartotojas arba grupė, atsakinga už šį projektą" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Nustatymo raktas" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Nustatymo reikšmė" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Pasirinkta reikšmė yra netinkama" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Reikšmė turi būti loginė (taip/ne)" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Reikšmė turi būti sveikasis skaičius" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Reikšmė turi būti tinkamas skaičius" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "Reikšmė neatitinka patikros taisyklių" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Raktas turi būti unikalus" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Vartotojas" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Kiekio ribinis taškas kainai" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Kaina" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Vieneto kaina nurodytam kiekiui" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Galutinis taškas" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Galutinis taškas, kuriuo priimamas šis webhook'as" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Šio webhook'o pavadinimas" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktyvus" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Ar šis webhook'as aktyvus" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Raktas" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Prieigos raktas" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Slaptas raktas" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Bendras slaptas HMAC raktas" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "Pranešimo ID" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Unikalus pranešimo identifikatorius" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Pagrindinis serveris" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Serveris, iš kurio gautas pranešimas" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Antraštė" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Šio pranešimo antraštė" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Turinys" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Šio pranešimo turinys" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Galutinis taškas, kuriame gautas pranešimas" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Apdorota" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Ar darbas su šiuo pranešimu baigtas?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "ID" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Pavadinimas" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Nuoroda" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Paskelbta" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Autorius" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Santrauka" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Perskaityta" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Ar ši naujiena buvo perskaityta?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Paveikslėlio failas" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "Modelio tipas, kuriam priskiriamas šis paveikslėlis" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "Modelio ID, kuriam priskiriamas šis paveikslėlis" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Pasirinktinis vienetas" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Vieneto simbolis turi būti unikalus" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Vieneto pavadinimas turi būti tinkamas identifikatorius" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Vieneto pavadinimas" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Simbolis" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Nebūtinas vieneto simbolis" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Apibrėžimas" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Vieneto apibrėžimas" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Priedas" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Trūksta failo" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Trūksta išorinės nuorodos" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Modelio tipas" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "Modelio tipas, kuriam skirtas paveikslėlis" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Pasirinkite failą priedui" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Komentaras" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Komentaras prie priedo" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Įkėlimo data" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Failo įkėlimo data" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Failo dydis" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Failo dydis baitais" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Netinkamas modelio tipas priedui" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Pasirinktinė būsena" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Pasirinktinės būsenos" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Nuorodos būsenų rinkinys" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Būsenų rinkinys, papildomas šia pasirinktine būsena" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Loginis raktas" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "Loginis būsenos raktas, atitinkantis šią pasirinkitinę būseną" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Reikšmė" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "Skaitinė reikšmė, saugoma modelio duomenų bazėje" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Būsenos pavadinimas" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Etiketė" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Etiketė, rodoma vartotojo sąsajoje" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Spalva" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Spalva, rodoma vartotojo sąsajoje" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Modelis" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "Modelis, su kuriuo susieta būsena" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Turi būti pasirinktas modelis" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "Turi būti pasirinktas raktas" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "Turi būti pasirinktas loginis raktas" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "Raktas turi skirtis nuo loginio rakto" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Turi būti pateikta tinkama nuorodos būsenos klasė" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "Raktas turi skirtis nuo nuorodos būsenų loginių raktų" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "Loginis raktas turi būti tarp nuorodos būsenų loginių raktų" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "Pavadinimas turi skirtis nuo nuorodos būsenų pavadinimų" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Pasirinkimų sąrašas" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Pasirinkimų sąrašai" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Pasirinkimų sąrašo pavadinimas" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Pasirinkimų sąrašo aprašymas" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Užrakinta" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Ar šis sąrašas užrakintas?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Ar šį pasirinkimų sąrašą galima naudoti?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Šaltinio papildinys" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Papildinys, pateikiantis šį pasirinkimų sąrašą" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Šaltinio eilutė" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Neprivaloma eilutė, identifikuojanti šaltinį, naudotą šiam sąrašui" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Numatytasis įrašas" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Numatytasis šio pasirinkimų sąrašo įrašas" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Sukurta" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Data ir laikas, kada buvo sukurtas pasirinkimų sąrašas" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Paskutinį kartą atnaujinta" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Data ir laikas, kada paskutinį kartą buvo atnaujintas sąrašas" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Pasirinkimų sąrašo įrašas" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Pasirinkimų sąrašo įrašai" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Pasirinkimų sąrašas, kuriam priklauso šis įrašas" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Pasirinkimų sąrašo įrašo reikšmė" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Pasirinkimų įrašo etiketė" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Pasirinkimų įrašo aprašymas" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "Ar šis sąrašo įrašas aktyvus?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Parametro šablonas" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Žymimojo laukelio parametrai negali turėti matavimo vienetų" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Žymimojo laukelio parametrai negali turėti pasirinkimų" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Pasirinkimai turi būti unikalūs" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Parametro šablono pavadinimas turi būti unikalus" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Parametro pavadinimas" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Vienetai" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Fiziniai šio parametro vienetai" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Parametro aprašymas" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Žymimasis laukelis" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Ar šis parametras yra žymimasis laukelis?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Pasirinkimai" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Galimi pasirinkimai šiam parametrui (atskirti kableliais)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "Pasirinkimų sąrašas šiam parametrui" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Įjungta" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Neteisingas pasirinkimas parametro reikšmei" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Šablonas" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Data" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Parametro reikšmė" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Pastaba" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Neprivalomas pastabų laukas" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Brūkšninio kodo nuskaitymas" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Brūkšninio kodo duomenys" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Vartotojas, nuskaitęs brūkšninį kodą" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Laiko žymė" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Brūkšninio kodo nuskaitymo data ir laikas" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "URL galutinis taškas, kuris apdorojo brūkšninį kodą" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Kontekstas" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Konteksto duomenys brūkšninio kodo nuskaitymui" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Atsakas" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Atsako duomenys iš brūkšninio kodo nuskaitymo" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Rezultatas" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "Ar brūkšninio kodo nuskaitymas buvo sėkmingas?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Raktas" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} atšaukta" msgid "A order that is assigned to you was canceled" msgstr "Užsakymas, kuris buvo jums priskirtas, buvo atšauktas" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Gautos prekės" @@ -2392,1235 +2391,1243 @@ msgstr "Nurodo, ar nustatymą pakeičia aplinkos kintamasis" msgid "Override" msgstr "Nepaisyti" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Vykdoma" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Laukiančios užduotys" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Suplanuotos užduotys" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Nepavykusios užduotys" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "Užduoties ID" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Unikalus užduoties ID" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Užraktas" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Užrakto laikas" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Užduoties pavadinimas" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Funkcija" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Funkcijos pavadinimas" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumentai" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Užduoties argumentai" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Rakto argumentai" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Užduoties rakto argumentai" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Failo pavadinimas" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Modelio tipas" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Vartotojas neturi leidimo kurti ar redaguoti šio modelio priedų" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Pasirinkimų sąrašas yra užrakintas" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Nėra grupės" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Svetainės URL yra užrakintas konfigūracijoje" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Reikalingas paleidimas iš naujo" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Nustatymas buvo pakeistas ir reikia paleisti serverį iš naujo" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Laukiančios migracijos" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Laukiančių duomenų bazės migracijų skaičius" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "Egzemplioriaus ID" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Unikalus identifikatorius šiam InvenTree egzemplioriui" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Pranešimo ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Skelbti serverio egzemplioriaus ID serverio būsenos informacijoje (neprisijungus)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Serverio egzemplioriaus pavadinimas" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Serverio egzemplioriaus pavadinimas kaip eilutė" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Naudoti egzemplioriaus pavadinimą" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Naudoti egzemplioriaus pavadinimą antraštės juostoje" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Apriboti `apie` rodymą" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "`Apie` langą rodyti tik super-vartotojams" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Įmonės pavadinimas" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Vidinis įmonės pavadinimas" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Pagrindinis URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Pagrindinis URL šiam serverio egzemplioriui" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Numatytoji valiuta" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Pasirinkti pagrindinę valiutą kainų skaičiavimui" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Palaikomos valiutos" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Palaikomų valiutų kodų sąrašas" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Valiutų atnaujinimo intervalas" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Kaip dažnai atnaujinti valiutų kursus (nulis – išjungti)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "dienos" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Valiutų atnaujinimo papildinys" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Naudotinas valiutų atnaujinimo papildinys" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Atsisiųsti iš URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Leisti atsisiųsti išorinius paveikslėlius ir failus iš nuorodų" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Atsisiuntimo dydžio riba" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Didžiausias leistinas atsisiunčiamo paveikslėlio dydis" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "Naudojamas user-agent atsisiuntimui iš URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Leisti pakeisti user-agent, naudojamą atsisiunčiant paveikslėlius ir failus iš išorinio URL (palikite tuščią, jei naudoti numatytąjį)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Griežtas URL tikrinimas" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Reikalauti schemos nurodymo tikrinant URL" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Atnaujinimų tikrinimo intervalas" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Kaip dažnai tikrinti atnaujinimus (nulis – išjungti)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Automatinė atsarginė kopija" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Įjungti automatinį duomenų bazės ir failų atsarginį kopijavimą" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Automatinio atsarginės kopijos kūrimo intervalas" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Nurodykite dienų skaičių tarp atsarginių kopijų kūrimo" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Užduočių ištrynimo intervalas" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Foninių užduočių rezultatai bus ištrinti po nurodyto dienų skaičiaus" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Klaidų žurnalo ištrynimo intervalas" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Klaidų žurnalai bus ištrinti po nurodyto dienų skaičiaus" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Pranešimų ištrynimo intervalas" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Vartotojų pranešimai bus ištrinti po nurodyto dienų skaičiaus" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Brūkšninių kodų palaikymas" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Įjungti brūkšninių kodų skaitytuvo palaikymą žiniatinklio sąsajoje" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Išsaugoti brūkšninių kodų nuskaitymus" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Brūkšninių kodų nuskaitymo rezultatus išsaugoti duomenų bazėje" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Maksimalus nuskaitymų skaičius" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Maksimalus saugomų brūkšninių kodų nuskaitymų skaičius" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Brūkšninio kodo įvesties delsimas" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Brūkšninio kodo įvesties apdorojimo delsos laikas" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Brūkšninių kodų palaikymas per kamerą" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Leisti brūkšninių kodų nuskaitymą per naršyklės kamerą" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Rodyti brūkšninio kodo duomenis" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Rodyti brūkšninio kodo duomenis naršyklėje kaip tekstą" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Brūkšninio kodo generavimo papildinys" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Papildinys vidiniam brūkšninių kodų generavimui" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Detalių versijos" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Įjungti versijos lauką detalėms" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "Tik surinkimo versijoms" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "Leisti versijas tik surenkamoms detalėms" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Leisti pašalinti iš surinkimo" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Leisti ištrinti detales, kurios yra naudojamos surinkimuose" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "IPN reguliarioji išraiška" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguliariosios išraiškos šablonas detalių IPN tikrinimui" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Leisti pasikartojančius IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Leisti kelioms detalėms turėti tą patį IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Leisti redaguoti IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Leisti keisti IPN reikšmę redaguojant detalę" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Kopijuoti detalės BOM duomenis" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopijuoti BOM duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Kopijuoti detalės parametrus" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopijuoti parametrų duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Kopijuoti detalės testavimo duomenis" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Kopijuoti testavimo duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Kopijuoti kategorijų parametrų šablonus" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Kopijuoti kategorijų parametrų šablonus kuriant detalę" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Detalės pagal nutylėjimą yra šablonai" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Detalės pagal nutylėjimą gali būti surenkamos iš kitų komponentų" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponentas" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Detalės pagal nutylėjimą gali būti naudojamos kaip sub-komponentai" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Galima įsigyti" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Detalės pagal nutylėjimą gali būti įsigyjamos" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Parduodama" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Detalės pagal nutylėjimą gali būti parduodamos" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Detalės pagal nutylėjimą gali būti sekamos" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtuali" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Detalės pagal nutylėjimą yra virtualios" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Rodyti susijusias detales" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Rodyti susijusias detales pasirinktai detalei" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Pradiniai atsargų duomenys" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Leisti sukurti pradinę atsargą pridedant naują detalę" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Pradiniai tiekėjo duomenys" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Leisti sukurti pradinius tiekėjo duomenis pridedant naują detalę" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Detalės pavadinimo rodymo formatas" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Detalės pavadinimo rodymo formatas" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Detalės kategorijos numatytoji piktograma" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Detalės kategorijos numatytoji piktograma (tuščia reiškia, kad nenaudojama)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Mažiausias kainos dešimtainių skaičių kiekis" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimalus dešimtainių skaitmenų skaičius rodomas kainodaros duomenyse" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Didžiausias kainos dešimtainių skaičių kiekis" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Didžiausias dešimtainių skaitmenų skaičius rodomas kainodaros duomenyse" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Naudoti tiekėjo kainas" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Įtraukti tiekėjų kainų lygius į bendrą kainodaros skaičiavimą" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Pirkimų istorija keičia kainas" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Istorinės pirkimo kainos pakeičia tiekėjo kainų lygius" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Naudoti atsargų kainas" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Naudoti kainas iš rankiniu būdu įvestų atsargų duomenų kainodaros skaičiavimui" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Atsargų kainų galiojimo trukmė" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Pašalinti senesnes nei nurodytas dienų skaičius atsargas iš kainodaros skaičiavimų" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Naudoti variantų kainas" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Įtraukti variantų kainas į bendrą kainodaros skaičiavimą" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Tik aktyvūs variantai" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Naudoti tik aktyvius detalių variantus kainodarai" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Kainodaros atnaujinimo intervalas" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Dienų skaičius iki automatinio detalių kainų atnaujinimo" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Vidinės kainos" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Įjungti vidines kainas detalėms" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Vidinės kainos viršenybė" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Jei yra, vidinės kainos pakeičia bendrus kainodaros skaičiavimus" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Įjungti etikečių spausdinimą" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Įjungti etikečių spausdinimą iš žiniatinklio sąsajos" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "Etiketės vaizdo DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI raiška generuojant vaizdus etikečių spausdinimo papildiniams" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Įjungti ataskaitas" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Įjungti ataskaitų generavimą" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Derinimo režimas" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Generuoti ataskaitas derinimo režimu (HTML išvestis)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Registruoti ataskaitų klaidas" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Registruoti klaidas, įvykusias generuojant ataskaitas" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Puslapio dydis" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Numatytasis PDF ataskaitų puslapio dydis" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Reikalauti parametrų vienetų" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Jei nurodyti vienetai, parametro reikšmės turi atitikti nurodytus vienetus" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Globaliai unikalūs serijiniai numeriai" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Atsargų serijos numeriai turi būti globaliai unikalūs" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Ištrinti išnaudotas atsargas" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Nustato numatytą elgseną, kai atsargos yra išnaudotos" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Partijos kodo šablonas" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Šablonas numatytiesiems atsargų partijos kodams generuoti" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Atsargų galiojimas" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Įjungti atsargų galiojimo funkcionalumą" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Parduoti pasibaigusias galioti atsargas" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Leisti parduoti pasibaigusias galioti atsargas" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Atsargų senėjimo laikas" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Dienų skaičius, po kurio atsargos laikomos pasenusiomis iki jų galiojimo pabaigos" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Naudoti pasibaigusias galioti atsargas gamyboje" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Leisti naudoti pasibaigusias galioti atsargas gamyboje" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Atsargų nuosavybės kontrolė" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Įjungti atsargų vietų ir vienetų nuosavybės kontrolę" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Atsargų vietos numatytoji piktograma" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Atsargų vietos numatytoji piktograma (tuščia reiškia nenaudojama)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Rodyti sumontuotas atsargas" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Rodyti sumontuotas atsargas atsargų lentelėse" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Tikrinti BOM montuojant atsargas" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Sumontuotos atsargos turi būti pirminio gaminio BOM" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Leisti perkelti neturimas atsargas" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Leisti perkelti atsargas tarp vietų net jei jų nėra atsargose" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Gamybos užsakymo nuorodos šablonas" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Privalomas šablonas gamybos užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Reikalauti atsakingo savininko" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Kiekvienam užsakymui turi būti priskirtas atsakingas savininkas" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Reikalauti aktyvios detalės" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Neleidžia kurti gamybos užsakymų neaktyvioms detalėms" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Reikalauti užrakintos detalės" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Neleidžia kurti gamybos užsakymų neužrakintoms detalėms" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "Reikalauti galiojančio komplektavimo sąrašo (BOM)" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Neleidžia kurti gamybos užsakymų, kol BOM nėra patvirtintas" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "Reikalauti uždarytų antrinių užsakymų" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Neleidžia užbaigti gamybos užsakymo, kol visi antriniai užsakymai neuždaryti" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Blokuoti, kol testai bus išlaikyti" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Neleidžia užbaigti gaminių, kol visi privalomi testai nėra išlaikyti" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Įjungti grąžinimo užsakymus" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Įjungia grąžinimo užsakymų funkciją vartotojo sąsajoje" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Grąžinimo užsakymo nuorodos šablonas" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Būtinas šablonas grąžinimo užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Redaguoti užbaigtus grąžinimo užsakymus" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Leisti redaguoti grąžinimo užsakymus po jų užbaigimo" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Pardavimo užsakymo nuorodos šablonas" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Būtinas šablonas pardavimo užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Numatytasis siuntinys pardavimo užsakymui" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Leisti automatiškai sukurti siuntinį kartu su pardavimo užsakymu" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Redaguoti užbaigtus pardavimo užsakymus" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Leisti redaguoti pardavimo užsakymus po jų išsiuntimo arba užbaigimo" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Pažymėti išsiųstus užsakymus kaip užbaigtus" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Pardavimo užsakymai, pažymėti kaip išsiųsti, bus automatiškai užbaigti, praleidžiant būseną „išsiųsta“" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Pirkimo užsakymo nuorodos šablonas" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Būtinas šablonas pirkimo užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Redaguoti užbaigtus pirkimo užsakymus" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Leisti redaguoti pirkimo užsakymus po jų išsiuntimo arba užbaigimo" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Konvertuoti valiutą" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "Konvertuoti prekių vertę į pagrindinę valiutą priimant prekes" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Automatiškai užbaigti pirkimo užsakymus" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatiškai pažymėti pirkimo užsakymus kaip užbaigtus, kai visos eilutės yra gautos" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Įjungti pamiršto slaptažodžio funkciją" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Leisti naudoti pamiršto slaptažodžio funkciją prisijungimo puslapyje" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Įjungti registraciją" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Leisti vartotojams savarankiškai registruotis prisijungimo puslapyje" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Įjungti vieningą prisijungimą (SSO)" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Įjungti vieningą prisijungimą (SSO) prisijungimo puslapyje" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Įjungti registraciją per SSO" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Leisti vartotojams registruotis per SSO prisijungimo puslapyje" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "Įjungti SSO grupių sinchronizavimą" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Įjungti InvenTree grupių sinchronizavimą su tapatybės tiekėjo (IdP) grupėmis" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "SSO grupės raktas" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Grupių atributo pavadinimas, kurį pateikia tapatybės tiekėjas (IdP)" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "SSO grupių susiejimas" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "SSO grupių susiejimas su vietinėmis InvenTree grupėmis. Jei vietinė grupė neegzistuoja, ji bus sukurta." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Pašalinti grupes, nepriklausančias SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Ar pašalinti vartotojui priskirtas grupes, jei jos nėra pateikiamos per IdP. Išjungus gali kilti saugumo problemų" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "El. paštas privalomas" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Reikalauti vartotojo el. pašto registracijos metu" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Automatiškai užpildyti SSO naudotojų duomenis" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatiškai užpildyti vartotojo informaciją pagal SSO paskyros duomenis" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Įvesti el. paštą du kartus" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Registracijos metu prašyti vartotojų du kartus įvesti el. paštą" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Įvesti slaptažodį du kartus" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Registracijos metu prašyti vartotojų du kartus įvesti slaptažodį" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Leidžiami domenai" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Riboti registraciją tik tam tikriems domenams (atskiriama kableliais, prasideda @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Grupė registruojantis" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupė, į kurią priskiriami nauji vartotojai registracijos metu. Jei įjungta SSO grupių sinchronizacija, ši grupė nustatoma tik tuo atveju, jei grupė negaunama iš IdP." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Reikalauti kelių veiksnių autentifikacijos (MFA)" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Vartotojai privalo naudoti kelių veiksnių apsaugą." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Tikrinti įskiepius paleidimo metu" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Tikrina, ar visi įskiepiai įdiegti paleidžiant – naudoti konteinerių aplinkose" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Tikrinti įskiepių atnaujinimus" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Įjungti periodinius įdiegtų įskiepių atnaujinimų tikrinimus" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Įjungti URL integravimą" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Leisti įskiepiams pridėti URL maršrutus" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Įjungti navigacijos integraciją" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Leisti įskiepiams integruotis į navigaciją" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Įjungti programų integraciją" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Leisti įskiepiams pridėti programas" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Įjungti planavimo integraciją" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Leisti įskiepiams vykdyti suplanuotas užduotis" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Įjungti įvykių integraciją" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Leisti įskiepiams reaguoti į vidinius įvykius" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Įjungti sąsajos integraciją" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Leisti įskiepiams integruotis į vartotojo sąsają" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "Įjungti projektų kodus" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Įjungti projektų kodų naudojimą projektų sekimui" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Neįtraukti išorinių vietų" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Automatinės inventorizacijos periodas" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Rodyti pilnus vartotojų vardus" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Rodyti pilnus vardus vietoj vartotojo vardų" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "Rodyti vartotojų profilius" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "Rodyti vartotojų profilius jų paskyros puslapyje" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Įjungti bandymų stoties duomenis" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Įjungti bandymų stoties duomenų rinkimą testų rezultatams" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "Detalė yra aktyvi" msgid "Manufacturer is Active" msgstr "Gamintojas yra aktyvus" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "Tiekėjo detalė yra aktyvi" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "Vidinė detalė yra aktyvi" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "Tiekėjas yra aktyvus" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Gamintojas" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Įmonė" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Turi atsargų" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Įmonės" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Įmonės aprašymas" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Įmonės aprašymas" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Tinklalapis" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Įmonės tinklalapio URL" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Telefono numeris" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kontaininis telefono numeris" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontaktinis el. pašto adresas" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontaktinis asmuo" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Kontaktinis asmuo" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Nuoroda į išorinę įmonės informaciją" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Ar ši įmonė aktyvi?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Yra klientas" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Ar parduodate prekes šiai įmonei?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Yra tiekėjas" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Ar perkate prekes iš šios įmonės?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Yra gamintojas" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Ar ši įmonė gamina detales?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Numatytoji valiuta, naudojama šiai įmonei" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Adresas" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Adresai" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Pasirinkite įmonę" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Adreso pavadinimas" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Pavadinimas, apibūdinantis adreso įrašą" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Pagrindinis adresas" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Nustatyti kaip pagrindinį adresą" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "1-a eilutė" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Adreso 1-a eilutė" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "2-a eilutė" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Adreso 2-a eilutė" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Pašto kodas" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Miestas / regionas" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Pašto kodas, miestas / regionas" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Valstija / provincija" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Valstija arba provincija" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Šalis" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Adreso šalis" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Kurjerio siuntos pastabos" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Pastabos siuntų kurjeriui" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Vidinės siuntos pastabos" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Siuntimo pastabos vidiniam naudojimui" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Nuoroda į adreso informaciją (išorinė)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Gamintojo detalė" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Pagrindinė detalė" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Pasirinkite detalę" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Pasirinkite gamintoją" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Gamintojo detalės numeris (MPN)" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "Išorinės nuorodos į gamintojo detalės URL" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Gamintojo detalės aprašymas" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Pakuotės vienetai turi atitikti pagrindinės detalės vienetus" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Pakuotės vienetų kiekis turi būti didesnis už nulį" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Susieta gamintojo detalė turi nurodyti tą pačią pagrindinę detalę" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Tiekėjas" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Pasirinkite tiekėją" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Tiekėjo sandėlio numeris (SKU)" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Ar ši tiekėjo detalė aktyvi?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Pasirinkite gamintojo detalę" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "Išorinės nuorodos į tiekėjo detalės URL" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Tiekėjo detalės aprašymas" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "bazinė kaina" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalus mokestis (pvz., sandėliavimo mokestis)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Pakuotė" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Detalės pakuotė" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Pakuotės kiekis" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Bendras kiekis vienoje pakuotėje. Palikite tuščią, jei prekė tiekiama po vieną." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "daugiklis" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Užsakymo daugiklis" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Tiekėjo turimas kiekis" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Prieinamumas atnaujintas" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Paskutinio prieinamumo duomenų atnaujinimo data" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Tiekėjo kainos ribos" @@ -4316,7 +4323,7 @@ msgstr "Numatytoji valiuta, naudojama šiam tiekėjui" msgid "Company Name" msgstr "Įmonės pavadinimas" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Sandėlyje" @@ -4452,7 +4459,7 @@ msgstr "Laukas neegzistuoja tiksliniame modelyje" msgid "Selected field is read-only" msgstr "Pasirinktas laukas yra tik skaitomas" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Importavimo sesija" @@ -4464,31 +4471,31 @@ msgstr "Laukas" msgid "Column" msgstr "Stulpelis" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Eilutės indeksas" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Pradiniai eilutės duomenys" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Klaidos" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Galiojantis" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "Etiketės spausdinamų kopijų skaičius" msgid "Connected" msgstr "Prijungta" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Nežinoma" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Užsakymo nuoroda" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Neįvykdyta" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Turi projekto kodą" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Sukūrė" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Sukurta prieš" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Sukurta po" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "Turi pradžios datą" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "Pradžios data prieš" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "Pradžios data po" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "Turi tikslinę datą" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Tikslinė data prieš" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Tikslinė data po" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Turi kainodarą" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Užbaigta prieš" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Užbaigta po" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Užsakymas" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Užsakymas įvykdytas" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Vidinė detalė" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Užsakymas laukia vykdymo" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Užbaigta" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Turi siuntą" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Pirkimo užsakymas" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Pirkimo užsakymas" msgid "Sales Order" msgstr "Pardavimo užsakymas" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Bendra kaina" msgid "Total price for this order" msgstr "Bendra kaina už šį užsakymą" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Užsakymo valiuta" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Užsakymo valiuta (palikite tuščią, jei norite naudoti įmonės numatytąją valiutą)" @@ -4851,718 +4870,742 @@ msgstr "Užsakymo valiuta (palikite tuščią, jei norite naudoti įmonės numat msgid "This order is locked and cannot be modified" msgstr "Šis užsakymas užrakintas ir negali būti keičiamas" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Kontaktas nesutampa su pasirinkta įmone" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Pradžios data turi būti prieš tikslinę datą" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Užsakymo aprašymas (neprivalomas)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Pasirinkite projekto kodą šiam užsakymui" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Nuoroda į išorinį puslapį" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Pradžios data" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Numatyta pradžios data šiam užsakymui" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Tikslinė data" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Tikėtina užsakymo pristatymo data. Užsakymas bus vėluojantis po šios datos." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Išdavimo data" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Data, kada užsakymas buvo išduotas" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Vartotojas arba grupė, atsakinga už šį užsakymą" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Kontaktinis asmuo šiam užsakymui" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Įmonės adresas šiam užsakymui" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Užsakymo nuoroda" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Būsena" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Pirkimo užsakymo būsena" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Įmonė, iš kurios užsakomos prekės" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Tiekėjo nuoroda" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Tiekėjo užsakymo nuorodos kodas" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "gavo" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Data, kada užsakymas buvo užbaigtas" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Paskirties vieta" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Paskirties vieta gautoms prekėms" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Detalių tiekėjas turi atitikti pirkimo užsakymo tiekėją" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Eilutės įrašas neatitinka pirkimo užsakymo" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Kiekis turi būti teigiamas skaičius" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klientas" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Įmonė, kuriai prekės parduodamos" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Pardavimo užsakymo būsena" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Kliento nuoroda" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Kliento užsakymo nuorodos kodas" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Siuntos data" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "išsiuntė" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "Užsakymas jau baigtas" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "Užsakymas jau atšauktas" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Tik atviras užsakymas gali būti pažymėtas kaip užbaigtas" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Užsakymas negali būti užbaigtas, nes yra neišsiųstų siuntų" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Užsakymas negali būti užbaigtas, nes yra nepriskirtų prekių" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "Užsakymas negali būti užbaigtas, nes yra neužbaigtų eilučių" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "Užsakymas užrakintas ir negali būti keičiamas" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Prekės kiekis" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Eilutės įrašo nuoroda" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Eilutės įrašo pastabos" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Tikslinė šio eilutės įrašo data (palikite tuščią, jei norite naudoti užsakymo tikslinę datą)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Eilutės įrašo aprašymas (neprivalomas)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Papildomas kontekstas šiai eilutei" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Vieneto kaina" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "Pirkimo užsakymo eilutės įrašas" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "Tiekėjo detalė turi atitikti tiekėją" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Tiekėjo detalė" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Gauta" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Gautų prekių kiekis" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Pirkimo kaina" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Vieneto pirkimo kaina" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "Pirkimo užsakymo papildoma eilutė" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "Pardavimo užsakymo eilutės įrašas" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Tik parduodamos detalės gali būti priskirtos pardavimo užsakymui" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Pardavimo kaina" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Vieneto pardavimo kaina" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Išsiųsta" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Išsiųstas kiekis" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "Pardavimo užsakymo siunta" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Siuntos data" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Pristatymo data" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Siuntos pristatymo data" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Patikrino" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Vartotojas, patikrinęs šią siuntą" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Siunta" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Siuntos numeris" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Sekimo numeris" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Siuntos sekimo informacija" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Sąskaitos faktūros numeris" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Nuorodos numeris susijusiai sąskaitai faktūrai" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Siunta jau buvo išsiųsta" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Siunta neturi priskirtų prekių" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "Pardavimo užsakymo papildoma eilutė" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "Pardavimo užsakymo paskirstymas" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "Prekė nėra priskirta" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Negalima priskirti prekių eilutei su skirtinga detale" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Negalima priskirti prekių eilutei, jei joje nėra detalės" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Priskiriamas kiekis negali viršyti atsargų kiekio" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Priskirtas kiekis turi būti didesnis nei nulis" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "Kiekis turi būti 1, jei prekė turi serijos numerį" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Pardavimo užsakymas nesutampa su siunta" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Siunta nesutampa su pardavimo užsakymu" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Eilutė" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Pardavimo užsakymo siuntos nuoroda" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Prekė" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Pasirinkite atsargų elementą priskyrimui" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Įveskite prekių priskyrimo kiekį" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Grąžinimo užsakymo nuoroda" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Įmonė, iš kurios grąžinamos prekės" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Grąžinimo užsakymo būsena" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "Grąžinimo užsakymo eilutės įrašas" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "Turi būti nurodytas atsargų elementas" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "Grąžinamo kiekis viršija prekių kiekį" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "Grąžinamo kiekis turi būti daugiau nei nulis" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "Neteisingas kiekis serijinio numerio prekei" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Pasirinkite prekę grąžinimui iš kliento" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Gavimo data" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Rezultatas" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Rezultatas šiam eilutės įrašui" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Išlaidos, susijusios su šio eilutės įrašo grąžinimu ar remontu" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "Grąžinimo užsakymo papildoma eilutė" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "Užsakymo ID" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "Užsakymo, kurį reikia dubliuoti, ID" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Kopijuoti eilutes" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Kopijuoti eilutės įrašus iš pradinio užsakymo" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Kopijuoti papildomas eilutes" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Kopijuoti papildomas eilutes iš pradinio užsakymo" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopijuoti parametrus" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Eilutės įrašai" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Užbaigtos eilutės" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Dubliuoti užsakymą" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Nurodykite užsakymo dubliavimo parinktis" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Neteisingas užsakymo ID" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Tiekėjo pavadinimas" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Užsakymo atšaukti negalima" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Leisti užbaigti užsakymą su neužbaigtais eilutės įrašais" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "Užsakyme yra neužbaigtų eilutės įrašų" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "Užsakymas nėra atidarytas" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Automatinis kainų nustatymas" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automatiškai apskaičiuoti pirkimo kainą pagal tiekėjo detalės duomenis" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Pirkimo kainos valiuta" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Sujungti elementus" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Sujungti elementus su ta pačia detale, paskirtimi ir tiksline data į vieną eilutės įrašą" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Vidinis detalės numeris" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Vidinis detalės pavadinimas" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Turi būti nurodyta tiekėjo detalė" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Turi būti nurodytas pirkimo užsakymas" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Tiekėjas turi atitikti pirkimo užsakymą" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Pirkimo užsakymas turi atitikti tiekėją" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Eilutės įrašas" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Pasirinkite paskirties vietą gautiems elementams" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Įveskite partijos kodą gaunamoms atsargoms" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Galiojimo data" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "Įveskite galiojimo datą gaunamoms atsargoms" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Įveskite gaunamų atsargų serijos numerius" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "Pakeisti gaunamų atsargų pakavimo informaciją" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "Papildoma pastaba gaunamoms atsargoms" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Brūkšninis kodas" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Nuskaitytas brūkšninis kodas" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Brūkšninis kodas jau naudojamas" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Turi būti pateikti eilutės įrašai" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Turi būti nurodyta paskirties vieta" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Pateiktos brūkšninių kodų reikšmės turi būti unikalios" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Siuntos" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Užbaigtos siuntos" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Pardavimo kainos valiuta" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Paskirstyti elementai" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Nepateikta siuntos informacija" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Eilutės įrašas nėra susijęs su šiuo užsakymu" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Kiekis turi būti teigiamas" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Įveskite priskiriamus serijos numerius" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "Siunta jau išsiųsta" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "Siunta nėra susieta su šiuo užsakymu" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Nerasta atitikmenų šiems serijos numeriams" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Šie serijos numeriai nepasiekiami" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Grąžinimo užsakymo eilutės įrašas" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Eilutės įrašas neatitinka grąžinimo užsakymo" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Eilutės įrašas jau gautas" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Elementai gali būti priimami tik pagal vykdomus užsakymus" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "Grąžinamas kiekis" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Eilutės kainos valiuta" @@ -5598,146 +5641,146 @@ msgstr "Pinigų grąžinimas" msgid "Reject" msgstr "Atmesti" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Vėluojantis pirkimo užsakymas" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Pirkimo užsakymas {po} dabar vėluoja" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Vėluojantis pardavimo užsakymas" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Pardavimo užsakymas {so} dabar vėluoja" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Vėluojantis grąžinimo užsakymas" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "Grąžinimo užsakymas {ro} dabar vėluoja" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Pažymėta žvaigždute" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filtruoti pagal pažymėtas kategorijas" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Gylis" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtruoti pagal kategorijos gylį" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Aukščiausio lygio" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtruoti pagal aukščiausio lygio kategorijas" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Kaskada" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Įtraukti sub-kategorijas į filtravimo rezultatus" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Pirminė kategorija" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filtruoti pagal pirminę kategoriją" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Neįtraukti sub-kategorijų po nurodyta kategorija" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Turi rezultatų" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Yra variantas" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Yra versija" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Turi versijų" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "BOM galiojantis" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Surinkimo detalė gali būti testuojama" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "Komponento detalė gali būti testuojama" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Naudoja" @@ -5750,7 +5793,7 @@ msgstr "Detalių kategorija" msgid "Part Categories" msgstr "Detalių kategorijos" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Numatytoji vieta" @@ -5778,7 +5821,7 @@ msgstr "Numatytieji raktažodžiai detalėms šioje kategorijoje" msgid "Icon" msgstr "Piktograma" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Piktograma (neprivaloma)" @@ -5799,7 +5842,7 @@ msgstr "Numatytoji reikšmė" msgid "Default Parameter Value" msgstr "Numatytoji parametro reikšmė" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Detalės" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "Detalė negali būti savo pačios versija" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "Negalima sukurti detalės versijos, jei tai jau yra kita versija" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "Turi būti nurodytas versijos kodas" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "Versijos leidžiamos tik surinkimo detalėms" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "Negalima sukurti šabloninės detalės versijos" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "Pagrindinė detalė turi būti susieta su tuo pačiu šablonu" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Atsargų elementas su šiuo serijos numeriu jau egzistuoja" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dublikatų detalių nustatymuose naudoti negalima" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "Tokia detalės versija jau egzistuoja." -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Detalė su tokiu pavadinimu, IPN ir versija jau egzistuoja." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Detalės negali būti priskirtos struktūrinėms detalių kategorijoms!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Detalės pavadinimas" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Yra šablonas" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Ar ši detalė yra šabloninė detalė?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Ar ši detalė yra kitos detalės variantas?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Variantas iš" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Detalės aprašymas (neprivalomas)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Raktažodžiai" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Detalės raktažodžiai, skirti pagerinti matomumą paieškos rezultatuose" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Detalės kategorija" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Detalės versija arba numeris" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Versija" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "Ar ši detalė yra kitos detalės versija?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Versija iš" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Kur ši detalė paprastai laikoma?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Numatytasis galiojimo laikas" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Šios detalės atsargų galiojimo laikas (dienomis)" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimalus atsargų kiekis" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Mažiausias leidžiamas atsargų kiekis" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Šios detalės matavimo vienetai" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Ar ši detalė gali būti pagaminta iš kitų detalių?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Ar ši detalė gali būti naudojama kitoms detalėms gaminti?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Ar ši detalė turi unikalių vienetų sekimą?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "Ar šiai detalei gali būti priskirti bandymų rezultatai?" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Ar ši detalė gali būti perkama iš išorinių tiekėjų?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Ar ši detalė gali būti parduodama klientams?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Ar ši detalė yra aktyvi?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Užrakintos detalės negali būti redaguojamos" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "Ar tai virtuali detalė, pavyzdžiui, programinė įranga ar licencija?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "BOM kontrolinė suma" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Išsaugota BOM kontrolinė suma" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "Detalių sąrašą patikrino" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Detalių sąrašo patikrinimo data" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Sukūręs vartotojas" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Atsakingas vartotojas už šią detalę" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Parduodamas kiekis" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Valiuta, naudojama kainų skaičiavimams kaupti" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Minimali BOM kaina" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Minimali komponentų detalių kaina" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Maksimali BOM kaina" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Maksimali komponentų detalių kaina" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Minimali pirkimo kaina" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Mažiausia istorinė pirkimo kaina" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Maksimali pirkimo kaina" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Didžiausia istorinė pirkimo kaina" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Minimali vidinė kaina" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Mažiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Maksimali vidinė kaina" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Didžiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Mažiausia tiekėjo kaina" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Mažiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Didžiausia tiekėjo kaina" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Didžiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Mažiausia varianto kaina" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Apskaičiuota minimali variantų detalių kaina" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Didžiausia varianto kaina" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Apskaičiuota didžiausia variantų detalių kaina" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Minimali kaina" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Nepaisyti minimalios kainos" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Maksimali kaina" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Nepaisyti maksimalios kainos" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Apskaičiuota bendra minimali kaina" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Apskaičiuota bendra maksimali kaina" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Minimali pardavimo kaina" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Mažiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Didžiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Mažiausia pardavimo kaina" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Mažiausia istorinė pardavimo kaina" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Didžiausia istorinė pardavimo kaina" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Detalė inventorizacijai" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Vienetų skaičius" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Atsargų įrašų skaičius inventorizacijos metu" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Bendras prieinamas atsargų kiekis inventorizacijos metu" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Inventorizacijos atlikimo data" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Minimali atsargų kaina" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Apytikslė minimali turimų atsargų kaina" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Maksimali atsargų kaina" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Apytikslė maksimali turimų atsargų kaina" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "Detalės kainų intervalai pardavimui" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "Detalės bandymų šablonas" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Netinkamas šablono pavadinimas - turi būti bent vienas raidinis ar skaitinis simbolis" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Bandymų šablonus galima kurti tik testuojamoms detalėms" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "Detalė jau turi bandymų šabloną su tokiu pačiu raktu" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Bandymo pavadinimas" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Įveskite bandymo pavadinimą" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "Bandymo raktas" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "Supaprastintas bandymo raktas" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Bandymo aprašymas" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Įveskite šio bandymo aprašymą" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "Ar šis bandymas įjungtas?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Privalomas" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Ar šį bandymą būtina išlaikyti?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Reikalauja reikšmės" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Ar šiam bandymui reikia įvesti reikšmę pridedant rezultatą?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Reikalauja priedo" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Ar šiam bandymui reikia pridėti failą su rezultatu?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "Galimi pasirinkimai šiam bandymui (atskirti kableliais)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM elemento keisti negalima - surinkimas užrakintas" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM elemento keisti negalima - varianto surinkimas užrakintas" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Pasirinkite pirminę detalę" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Pavaldi detalė" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Pasirinkite detalę, naudojamą BOM" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "BOM reikalingas šios detalės kiekis" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Šis BOM elementas yra pasirenkamas" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Šis BOM elementas yra sunaudojamas (nesekamas gamybos užsakymuose)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "BOM nuoroda" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "BOM pastabos" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Kontrolinė suma" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "BOM eilutės kontrolinė suma" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Patvirtinta" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Šis BOM elementas patvirtintas" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Paveldima" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Šį BOM elementą paveldi variantų sąrašai" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Šiam BOM elementui galima naudoti variantinių detalių atsargas" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Sekamoms detalėms kiekis turi būti sveikasis skaičius" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Turi būti nurodyta pavaldi detalė" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "BOM elemento pakaitalas" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "Pakaitinė detalė negali būti tokia pati kaip pagrindinė detalė" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Pagrindinis BOM elementas" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Pakaitinė detalė" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Detalė 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Detalė 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Pasirinkite susijusią detalę" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Pastaba šiam ryšiui" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Detalių ryšio negalima sukurti tarp detalės ir jos pačios" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Toks ryšys jau egzistuoja" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Pagrindinė kategorija" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Pagrindinė detalių kategorija" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Subkategorijos" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Rezultatai" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Rezultatų skaičius, susietas su šiuo šablonu" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Šio atsargų elemento pirkimo valiuta" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Failas nėra paveikslėlis" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Pradinė detalė" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Pasirinkite pradinę detalę kopijavimui" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopijuoti paveikslėlį" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Kopijuoti paveikslėlį iš pradinės detalės" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Kopijuoti BOM" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Kopijuoti komplektavimo žiniaraštį iš pradinės detalės" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Kopijuoti parametrus" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Kopijuoti parametrų duomenis iš pradinės detalės" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Kopijuoti pastabas" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Kopijuoti pastabas iš pradinės detalės" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Pradinis atsargų kiekis" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Nurodykite pradinį atsargų kiekį šiai detalei. Jei kiekis nulis - atsargos nebus pridėtos." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Pradinė atsargų vieta" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Nurodykite pradinę atsargų vietą šiai detalei" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Pasirinkite tiekėją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Pasirinkite gamintoją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Gamintojo detalės numeris" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Pasirinkta įmonė nėra galiojantis tiekėjas" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Pasirinkta įmonė nėra galiojantis gamintojas" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Detalė su šiuo gamintojo numeriu (MPN) jau egzistuoja" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Tiekėjo detalė su šiuo SKU jau egzistuoja" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategorijos pavadinimas" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Surinkimas" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Atsargos" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "Versijos" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Bendros atsargos" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Nepriskirtos atsargos" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Variantų atsargos" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Kopijuoti detalę" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kopijuoti pradinius duomenis iš kitos detalės" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Pradinės atsargos" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Sukurti detalę su pradiniu atsargų kiekiu" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Tiekėjo informacija" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Pridėti pradinę tiekėjo informaciją šiai detalei" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kopijuoti kategorijos parametrus" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Kopijuoti parametrų šablonus iš pasirinktos detalių kategorijos" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Esamas paveikslėlis" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Esamos detalės paveikslėlio failo pavadinimas" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Paveikslėlio failas neegzistuoja" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Patvirtinti visą komplektavimo žiniaraštį" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Galima surinkti" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Mažiausia kaina" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Pakeisti apskaičiuotą mažiausią kainą" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Mažiausios kainos valiuta" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Didžiausia kaina" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Pakeisti apskaičiuotą didžiausią kainą" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Didžiausios kainos valiuta" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Atnaujinti" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Atnaujinti šios detalės kainodarą" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nepavyko konvertuoti iš nurodytų valiutų į {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Mažiausia kaina negali būti didesnė už didžiausią kainą" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Didžiausia kaina negali būti mažesnė už mažiausią kainą" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Pasirinkite pirminį surinkimą" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Pasirinkite komponentinę detalę" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Pasirinkite detalę, iš kurios kopijuoti BOM" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Pašalinti esamus duomenis" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Pašalinti esamus BOM elementus prieš kopijuojant" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Įtraukti paveldėtus" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Įtraukti BOM elementus, paveldėtus iš šabloninių detalių" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Praleisti netinkamas eilutes" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Įjunkite šią parinktį, jei norite praleisti netinkamas eilutes" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Kopijuoti pakaitines detales" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopijuoti pakaitines detales, kai kopijuojami BOM elementai" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Perspėjimas apie mažas atsargas" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Galimas atsargų kiekis detalei {part.name} nukrito žemiau nustatyto minimalaus lygio" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "Suteikia palaikymą TME brūkšninių kodų nuskaitymui" msgid "The Supplier which acts as 'TME'" msgstr "Tiekėjas, veikiantis kaip 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Tik personalo vartotojai gali tvarkyti įskiepius" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Įskiepių diegimas išjungtas" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Įskiepis sėkmingai įdiegtas" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Įskiepis įdiegtas į {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Įskiepis neaptiktas registre" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Įskiepis nėra supakuotas įskiepis" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Įskiepio paketo pavadinimas nerastas" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Tik personalo vartotojai gali tvarkyti įskiepius" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Įskiepių šalinimas išjungtas" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Įskiepis negali būti pašalintas, nes šiuo metu yra aktyvus" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Įskiepis neįdiegtas" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Įskiepio diegimas nerastas" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Įskiepis sėkmingai pašalintas" @@ -7689,21 +7742,21 @@ msgstr "Pakuotės įskiepis" msgid "Plugin" msgstr "Įskiepis" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Autorius nerastas" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Įskiepis '{p}' nesuderinamas su dabartine InvenTree versija {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Įskiepiui reikalinga bent versija {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Įskiepiui reikalinga ne aukštesnė nei versija {v}" @@ -7884,51 +7937,51 @@ msgstr "Įdiegimas nepatvirtintas" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Pilnas perkrovimas" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Vykdyti pilną įskiepių registro perkrovimą" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Priverstinis perkrovimas" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Priverstinai perkrauti įskiepių registrą, net jei jis jau įkeltas" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Surinkti įskiepius" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Surinkti įskiepius ir įtraukti juos į registrą" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Aktyvuoti įskiepį" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Aktyvuoti šį įskiepį" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Ištrinti konfigūraciją" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Ištrinti įskiepio konfigūraciją iš duomenų bazės" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "Iš viso" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serijos numeris" @@ -8215,7 +8268,7 @@ msgstr "Atsargų elemento bandymo ataskaita" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Sumontuoti elementai" @@ -8248,184 +8301,196 @@ msgstr "Nėra rezultato (privaloma)" msgid "No result" msgstr "Nėra rezultato" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Ištekliaus failas neegzistuoja" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Paveikslėlio failas nerastas" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "Žyma part_image reikalauja detalės (Part) egzemplioriaus" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "Žyma company_image reikalauja įmonės (Company) egzemplioriaus" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filtruoti pagal vietos gylį" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Filtruoti pagal aukščiausio lygio vietas" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Įtraukti sub-vietas į filtravimo rezultatus" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Pirminė vieta" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtruoti pagal pirminę vietą" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Detalės pavadinimas (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Detalės pavadinimas turi (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Detalės pavadinimas (reguliarioji išraiška)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Detalės IPN (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Detalės IPN turi (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Detalės IPN (reguliarioji išraiška)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Mažiausias kiekis" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Didžiausias kiekis" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Būsenos kodas" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Išorinė vieta" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Sunaudota gamybos užsakyme" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Sumontuota kitame atsargų elemente" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Detalių medis" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Atnaujinta iki" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Atnaujinta po" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Inventorizacija iki" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Inventorizacija po" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Galiojimo data iki" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Galiojimo data po" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Pasenusi" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Reikalingas kiekis" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Turi būti pateikta galiojanti detalė" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Nurodyta tiekėjo detalė neegzistuoja" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Tiekėjo detalė turi nustatytą pakuotės dydį, bet nepažymėtas požymis use_pack_size" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serijos numeriai negali būti pateikti detalei, kurios negalima sekti" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "Atsargų vietos tipai" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Numatytoji piktograma visoms vietoms, kurioms nepaskirta piktograma (neprivaloma)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Atsargų vieta" @@ -8449,11 +8514,11 @@ msgstr "Atsargų vieta" msgid "Stock Locations" msgstr "Atsargų vietos" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Savininkas" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Pasirinkite savininką" @@ -8481,274 +8546,274 @@ msgstr "Šios vietos atsargų vietos tipas" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Negalite padaryti šios atsargų vietos struktūrine, nes joje jau yra atsargų!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Turi būti nurodyta detalė" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Atsargos negali būti patalpintos į struktūrines atsargų vietas!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Atsargų elementas negali būti sukurtas virtualioms detalėms" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Detalės tipas ('{self.supplier_part.part}') turi būti {self.part}" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Elemento, turinčio serijos numerį, kiekis turi būti 1" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Serijos numeris negali būti nustatytas, jei kiekis didesnis nei 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Elementas negali priklausyti pats sau" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Elementas turi turėti surinkimo nuorodą, jei is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Surinkimo nuoroda nenurodo į tą pačią detalę" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Pirminis atsargų elementas" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Pagrindinė detalė" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Pasirinkite atitinkančią tiekėjo detalę šiam atsargų elementui" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Kur yra šis atsargų elementas?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Pakuotė, kurioje laikomas šis atsargų elementas" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Sumontuotas į" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Ar šis elementas yra sumontuotas kitame elemente?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Šio elemento serijos numeris" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Šio atsargų elemento partijos kodas" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Atsargų kiekis" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Surinkimo šaltinis" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Surinkimas šiam atsargų elementui" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Sunaudojo" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Gamybos užsakymas, kuris sunaudojo šį atsargų elementą" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Pirkimo užsakymo šaltinis" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Pirkimo užsakymas šiam atsargų elementui" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Pardavimo užsakymo paskirtis" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Atsargų elemento galiojimo data. Po šios datos atsargos bus laikomos pasibaigusiomis" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Ištrinti išnaudojus" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Ištrinti šį atsargų elementą, kai atsargos bus išnaudotos" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Vieneto pirkimo kaina pirkimo metu" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Konvertuota į detalę" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Detalė nenustatyta kaip sekama" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Kiekis turi būti sveikasis skaičius" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Kiekis negali viršyti galimų atsargų kiekio ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Serijos numeriai turi būti pateikti sąraše" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Kiekis nesutampa su serijos numeriais" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Bandomasis šablonas neegzistuoja" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Atsargų elementas buvo priskirtas pardavimo užsakymui" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Atsargų elementas sumontuotas kitame elemente" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Atsargų elementas turi kitų elementų" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Atsargų elementas buvo priskirtas klientui" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Atsargų elementas šiuo metu gaminamas" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Su serijos numeriais pažymėtų atsargų sujungti negalima" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Pasikartojantys atsargų elementai" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Atsargų elementai turi būti susiję su ta pačia detale" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Atsargų elementai turi būti susiję su ta pačia tiekėjo detale" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Atsargų būsenos kodai turi sutapti" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Atsargų elemento negalima perkelti, nes jo nėra sandėlyje" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Atsargų elemento sekimas" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Įrašo pastabos" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Atsargų elemento bandymo rezultatas" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Šiam bandymui turi būti pateikta reikšmė" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Šiam bandymui turi būti įkeltas priedas" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Netinkama reikšmė šiam bandymui" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Bandymo rezultatas" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Bandymo išvesties reikšmė" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Bandymo rezultato priedas" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Bandymo pastabos" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "Bandymų stotis" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Bandymų stoties identifikatorius, kurioje atliktas bandymas" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "Pradėta" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Bandymo pradžios laiko žyma" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "Pabaigta" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Bandymo pabaigos laiko žyma" @@ -8792,246 +8857,246 @@ msgstr "Pasirinkite detalę serijos numeriui sugeneruoti" msgid "Quantity of serial numbers to generate" msgstr "Kiekis serijos numerių, kuriuos reikia sugeneruoti" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "Bandymo šablonas šiam rezultatui" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "Turi būti pateiktas šablono ID arba bandymo pavadinimas" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "Bandymo pabaigos laikas negali būti ankstesnis nei pradžios laikas" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Pirminis elementas" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "Pirminis atsargų elementas" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Naudoti pakuotės dydį pridedant: nurodytas kiekis yra pakuočių skaičius" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Įveskite serijos numerius naujiems elementams" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Tiekėjo detalės numeris" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Nebegaliojantis" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Antriniai elementai" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "Sekami elementai" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Šio atsargų elemento pirkimo kaina, vienetui arba pakuotei" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Įveskite atsargų elementų, kuriuos reikia serializuoti, skaičių" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Kiekis negali viršyti galimų atsargų kiekio ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Paskirties atsargų vieta" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Šiai detalei negali būti priskirti serijos numeriai" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Serijos numeriai jau egzistuoja" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Pasirinkite atsargų elementą montavimui" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Montuojamas kiekis" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Įveskite montuojamų elementų kiekį" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Pridėkite operacijos pastabą (neprivaloma)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "Montuojamas kiekis turi būti bent 1" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Atsargų elementas nepasiekiamas" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "Pasirinktos detalės nėra komplektavimo žiniaraštyje" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "Montuojamas kiekis negali viršyti turimo kiekio" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Paskirties vieta išmontuotam elementui" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Pasirinkite detalę, į kurią konvertuoti atsargų elementą" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "Pasirinkta detalė netinkama konvertavimui" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Negalima konvertuoti atsargų elemento, kuriam priskirta tiekėjo detalė" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Atsargų elemento būsenos kodas" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Pasirinkite atsargų elementus būsenai pakeisti" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Nepasirinkti jokie atsargų elementai" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Sub-vietos" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "Pirminė atsargų vieta" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Detalė turi būti parduodama" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "Elementas priskirtas pardavimo užsakymui" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "Elementas priskirtas gamybos užsakymui" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Klientas, kuriam priskiriami atsargų elementai" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "Pasirinkta įmonė nėra klientas" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Atsargų priskyrimo pastabos" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Turi būti pateiktas atsargų elementų sąrašas" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Atsargų sujungimo pastabos" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Leisti skirtingus tiekėjus" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Leisti sujungti atsargų elementus su skirtingomis tiekėjų detalėmis" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Leisti skirtingas būsenas" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Leisti sujungti atsargų elementus su skirtingais būsenos kodais" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Turi būti pateikti bent du atsargų elementai" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Be pakeitimų" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Atsargų elemento pirminio rakto reikšmė" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "Atsargų elemento nėra sandėlyje" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Atsargų operacijos pastabos" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "Kitas serijos numeris" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "Ankstesnis serijos numeris" @@ -9537,59 +9602,75 @@ msgstr "Vartotojo pavardė" msgid "Email address of the user" msgstr "Vartotojo el. pašto adresas" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personalas" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Ar šis vartotojas turi personalo leidimus" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Supervartotojas" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Ar šis vartotojas yra supervartotojas" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Ar ši vartotojo paskyra yra aktyvi" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "Tik supervartotojas gali keisti šį lauką" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "Neturite leidimo kurti vartotojų" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Jūsų paskyra sukurta." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Prisijungimui naudokite slaptažodžio atstatymo funkciją" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Sveiki atvykę į InvenTree" diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po index 84446b5c42..27408663af 100644 --- a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API galapunkts nav atrasts" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Lietotājam nav atļaujas, lai apskatītu šo modeli" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nevarēja konvertēt {original} par {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Norādītais daudzums nav derīgs" @@ -112,13 +104,13 @@ msgstr "Ievadiet datumu" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Piezīmes" @@ -131,75 +123,91 @@ msgstr "Vērtība '{name}' neparādās vajadzīgajā formātā" msgid "Provided value does not match required pattern: " msgstr "Norādītā vērtība neatbilst nepieciešamajam formātam: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Tukša sērijas numura rinda" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Atkārtojas sērijas numurs" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Grupas diapazons {group} pārsniedz pieļaujamo daudzumu ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Netika atrasts neviens sērijas numurs" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Noņemiet HTML tagus no šīs vērtības" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Savienojuma kļūda" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serveris atbildēja ar nederīgu statusa kodu" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Radās izņēmums" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serveris atbildēja ar nederīgu Content-Length vērtību" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Attēla izmērs ir pārāk liels" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Attēla lejupielāde pārsniedz maksimālo izmēru" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Attālais serveris atgrieza tukšu atbildi" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Norādītajā URL nav derīgs attēla fails" @@ -207,11 +215,11 @@ msgstr "Norādītajā URL nav derīgs attēla fails" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "" @@ -313,75 +321,66 @@ msgstr "" msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po index 62e4bed497..e4fc43f196 100644 --- a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API eindpunt niet gevonden" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Lijst met items of filters moet worden opgegeven voor bulk bewerking" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Items moeten worden opgegeven als een lijst" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Ongeldige items lijst verstrekt" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Filters moeten als woordenboek worden opgegeven" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Ongeldige filters opgegeven" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Alles filteren alleen gebruiken met True" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Geen items die overeenkomen met de opgegeven criteria" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Geen gegevens verstrekt" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Dit veld moet uniek zijn" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Gebruiker heeft geen rechten om dit model te bekijken" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "{original} kon niet worden omgezet naar {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveelheid ingevoerd" @@ -112,13 +104,13 @@ msgstr "Voer datum in" msgid "Invalid decimal value" msgstr "Ongeldige decimale waarde" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Opmerkingen" @@ -131,75 +123,91 @@ msgstr "Waarde '{name}' verschijnt niet in patroonformaat" msgid "Provided value does not match required pattern: " msgstr "Opgegeven waarde komt niet overeen met vereist patroon: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Kan niet meer dan 1000 items tegelijk serienummers geven." -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Leeg serienummer" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Duplicaat serienummer" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Ongeldige groep: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Groepsbereik {group} overschrijdt toegestane hoeveelheid ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Geen serienummers gevonden" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Hoeveelheid van unieke serienummers ({n}) moet overeenkomen met de hoeveelheid ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Verwijder HTML tags van deze waarde" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Gegevens bevatten verboden markdown inhoud" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Verbindingsfout" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Server reageerde met ongeldige statuscode" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Uitzondering opgetreden" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Server reageerde met ongeldige Content-Length waarde" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Afbeeldingsformaat is te groot" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Beelddownload overschrijdt de maximale grootte" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Externe server heeft lege reactie teruggegeven" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" @@ -207,11 +215,11 @@ msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" msgid "Log in to the app" msgstr "Log in op de app" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Schakel tweestapsverificatie in voordat je iets anders kunt doen." @@ -259,18 +267,18 @@ msgstr "Referentienummer is te groot" msgid "Invalid choice" msgstr "Ongeldige keuze" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Naam" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Omschrijving" msgid "Description (optional)" msgstr "Omschrijving (optioneel)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Pad" @@ -313,75 +321,66 @@ msgstr "Unieke hash van barcode gegevens" msgid "Existing barcode found" msgstr "Bestaande barcode gevonden" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Taak mislukt" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Achtergrondtaak '{f}' is mislukt na {n} pogingen" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverfout" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Er is een fout gelogd door de server." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Afbeelding" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Selecteer valuta uit beschikbare opties" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "Dit veld mag niet nul zijn." -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Ongeldige waarde" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Externe afbeelding" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL van extern afbeeldingsbestand" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Afbeeldingen van externe URL downloaden is niet ingeschakeld" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Fout bij het downloaden van afbeelding van externe URL" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "Ongeldig inhoudstype" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "Inhoudstype niet gevonden" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "Content type komt niet overeen met de vereiste mixin klasse" @@ -537,11 +536,11 @@ msgstr "Chinees (vereenvoudigd)" msgid "Chinese (Traditional)" msgstr "Chinees (traditioneel)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Update beschikbaar" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "Een update voor Inventree is beschikbaar" @@ -553,30 +552,30 @@ msgstr "Ongeldige fysieke eenheid" msgid "Not a valid currency code" msgstr "Geen geldige valutacode" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Status van bestelling" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Bovenliggende Productie" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Inclusief varianten" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Inclusief varianten" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Inclusief varianten" msgid "Part" msgstr "Onderdeel" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categorie" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Voorouderlijke bouw" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Toegewezen aan mij" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Toegewezen aan" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Gemaakt voor" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Gemaakt na" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Heeft een startdatum" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Vervaldatum voor" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Vervaldatum na" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Heeft doel datum" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Doel datum voor" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Doel datum na" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Voltooid voor" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Voltooid na" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Min. datum" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Max. datum" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Boomstructuur uitsluiten" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Verbruiksartikelen" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Optioneel" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Samenstelling" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Gevolgd" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Testbaar" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Openstaande order" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Toegewezen" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Verbruikt" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Beschikbaar" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "In bestelling" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Productieorder" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Locatie" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Uitvoer" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filter op uitvoer standaard item ID. Gebruik 'null' om niet geïnstalleerde build items te vinden." @@ -748,41 +751,41 @@ msgstr "Filter op uitvoer standaard item ID. Gebruik 'null' om niet geïnstallee msgid "Build Orders" msgstr "Productieorders" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Assemblage stuklijst is niet gevalideerd" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Bouw bestelling kan niet worden aangemaakt voor een inactief onderdeel" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Maken opdracht kan niet worden gemaakt voor een ontgrendeld onderdeel" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Bestellingen bouwen kan alleen extern worden vervuld voor aankochte onderdelen" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Verantwoorde gebruiker of groep moet worden opgegeven" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Bouworder onderdeel kan niet worden gewijzigd" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Doeldatum moet na startdatum zijn" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Productieorderreferentie" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Productieorderreferentie" msgid "Reference" msgstr "Referentie" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Korte beschrijving van de build (optioneel)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "Productie-opdracht waar dit product aan is toegewezen" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Selecteer onderdeel om te produceren" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Verkooporder Referentie" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "Productieopdracht waar dit productie aan is toegewezen" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Bronlocatie" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selecteer de locatie waar de voorraad van de productie vandaan moet komen (laat leeg om vanaf elke standaard locatie te nemen)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Externe bouw" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Deze bouw opdracht is extern uitgevoerd" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Bestemmings Locatie" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Selecteer locatie waar de voltooide items zullen worden opgeslagen" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Productiehoeveelheid" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Aantal voorraaditems om te produceren" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Voltooide voorraadartikelen" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Aantal voorraadartikelen die zijn voltooid" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Productiestatus" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Batchcode" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Batchcode voor deze productieuitvoer" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Aanmaakdatum" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Bouw start datum" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Geplande startdatum voor deze bestelling" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Verwachte opleveringsdatum" -#: build/models.py:376 +#: build/models.py:379 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:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Opleveringsdatum" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "voltooid door" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Uitgegeven door" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Gebruiker die de productieorder heeft gegeven" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Verantwoordelijke" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Gebruiker of groep verantwoordelijk voor deze bouwopdracht" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Externe Link" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link naar externe URL" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Bouw prioriteit" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioriteit van deze bouwopdracht" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Project code" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Project code voor deze build order" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Kan de bouwopdracht niet voltooien zolang onderliggende bouwopdrachten nog openstaan" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Kan de bouwopdracht niet voltooien zolang de output onvolledig is" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Verwijderen van taak om toewijzingen te voltooien mislukt" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Productieorder {build} is voltooid" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Een productieorder is voltooid" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienummers moeten worden opgegeven voor traceerbare onderdelen" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Geen productie uitvoer opgegeven" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Productie uitvoer is al voltooid" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Productuitvoer komt niet overeen met de Productieorder" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Hoeveelheid kan niet groter zijn dan aantal" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "Build output heeft niet alle vereiste tests doorstaan" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Build output {serial} heeft niet alle vereiste tests doorstaan" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" -msgstr "" +msgstr "Voorraadproducten zijn nog in productie" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Kan een build uitvoer niet gedeeltelijk voltooien met de toegewezen items" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Bouw order regel item" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Bouw object" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Bouw object" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Hoeveelheid" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Vereiste hoeveelheid voor bouwopdracht" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Aantal van verbruikte voorraad" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Productieartikel moet een productieuitvoer specificeren, omdat het hoofdonderdeel gemarkeerd is als traceerbaar" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "Toegewezen hoeveelheid moet groter zijn dan nul" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Toegewezen hoeveelheid ({q}) mag de beschikbare voorraad ({a}) niet overschrijden" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Voorraad item is te veel toegewezen" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Voorraadartikel" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Voorraad hoeveelheid toe te wijzen aan productie" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Installeren in" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Bestemming voorraadartikel" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Bouw level" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Onderdeel naam" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Productieuitvoer" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Productieuitvoer komt niet overeen met de bovenliggende productie" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Deze productieuitvoer is al voltooid" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Deze productieuitvoer is niet volledig toegewezen" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor productie uitvoer" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: build/serializers.py:339 +#: build/serializers.py:337 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:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Serienummers" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Voer serienummers in voor productieuitvoeren" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Voorraad locatie voor project uitvoer" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Serienummers automatisch toewijzen" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "De volgende serienummers bestaan al of zijn ongeldig" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Een lijst van productieuitvoeren moet worden verstrekt" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Voorraadlocatie voor geannuleerde outputs" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Toewijzingen weggooien" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Verwijder alle voorraadtoewijzingen voor geannuleerde outputs" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Reden voor annulering van bouworder(s)" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Locatie van voltooide productieuitvoeren" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Incomplete Toewijzing Accepteren" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Voltooi de uitvoer als de voorraad niet volledig is toegewezen" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Toegewezen voorraad gebruiken" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Verbruik elke voorraad die al is toegewezen aan deze build" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Verwijder Incomplete Uitvoeren" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Verwijder alle productieuitvoeren die niet zijn voltooid" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Niet toegestaan" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Accepteer zoals geconsumeerd onder deze bouwopdracht" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "De-alloceren voordat deze bouwopdracht voltooid wordt" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Overgealloceerde voorraad" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Hoe wilt u omgaan met extra voorraaditems toegewezen aan de bouworder" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Sommige voorraadartikelen zijn overalloceerd" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Accepteer Niet-toegewezen" -#: build/serializers.py:777 +#: build/serializers.py:775 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:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" -#: build/serializers.py:795 +#: build/serializers.py:793 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:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Vereiste productiehoeveelheid is voltooid" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Bouw opdracht heeft open sub bouw orders" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Bouwen moet in de productiestatus staan" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Productieorder heeft onvolledige uitvoeren" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Productielijn" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Productieuitvoer" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Productieuitvoer moet naar dezelfde productie wijzen" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Bouw lijn-item" -#: build/serializers.py:928 +#: build/serializers.py:926 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:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" -#: build/serializers.py:993 +#: build/serializers.py:991 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:1001 +#: build/serializers.py:999 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:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" -#: build/serializers.py:1089 +#: build/serializers.py:1087 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:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Locatie uitsluiten" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Uitwisselbare voorraad" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Voorraadartikelen op meerdere locaties kunnen uitwisselbaar worden gebruikt" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Vervangende Voorraad" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Toewijzing van vervangende onderdelen toestaan" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Optionele Items" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Alloceer optionele BOM items om bestelling te bouwen" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" -msgstr "" +msgstr "Alle artikelen" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" -msgstr "" +msgstr "Niet Gevolgde items" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "Gevolgde Items" #: build/serializers.py:1125 -msgid "Tracked Items" -msgstr "" - -#: build/serializers.py:1127 msgid "Item Type" -msgstr "" +msgstr "Item Type" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" -msgstr "" +msgstr "Selecteer item type om automatisch toe te wijzen" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Starten van automatische toewijzing taak mislukt" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "BOM referentie" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "BOM onderdeel ID" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "BOM onderdeel naam" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" -msgstr "" +msgstr "Instaleeren Op" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Bouwen" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Leveranciersonderdeel" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Toegewezen hoeveelheid" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Bouw referentie" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Naam categorie onderdeel" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Volgbaar" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Overgenomen" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Varianten toestaan" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "In productie" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Gepland om te bouwen" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Externe voorraad" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Beschikbare Voorraad" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Beschikbare vervanging voorraad" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Beschikbare varianten voorraad" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Verbruikte hoeveelheid overschrijdt toegewezen hoeveelheid" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Optionele notities voor voorraadverbruik" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "Het bouwelement moet verwijzen naar de juiste bouwopdracht" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Dupliceer build item allocatie" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "Build line moet verwijzen naar de juiste bouwopdracht" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Dupliceer build line toewijzing" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Ten minste één item of regel moet worden opgegeven" @@ -1495,43 +1494,43 @@ msgstr "In de wacht" msgid "Cancelled" msgstr "Geannuleerd" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Voltooid" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Voorraad vereist voor productieorder" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Bouw order {build} vereist extra voorraad" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Achterstallige Productieorder" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Productieorder {bo} is nu achterstallig" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "Is koppeling" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "Is een bestand" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Gebruiker heeft geen toestemming om deze bijlagen te verwijderen" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Gebruiker heeft geen toestemming om deze bijlage te verwijderen." @@ -1555,794 +1554,794 @@ msgstr "Geen plug-in gevonden" msgid "Project Code Label" msgstr "Projectcode label" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Bijgewerkt" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Tijdstempel van laatste update" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "Bijgewerkt door" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "Gebruiker die dit object voor het laatst heeft bijgewerkt" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Unieke projectcode" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Projectbeschrijving" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Gebruiker of groep die verantwoordelijk is voor dit project" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Instellingen" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Instellingswaarde" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Gekozen waarde is geen geldige optie" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Waarde moet een booleaanse waarde zijn" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Waarde moet een geheel getal zijn" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Waarde moet een geldig getal zijn" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "Waarde is niet geldig voor validatiecontrole" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Sleutelreeks moet uniek zijn" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Gebruiker" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Prijs pauze hoeveelheid" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Prijs" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Stukprijs op opgegeven hoeveelheid" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Eindpunt" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Eindpunt waarop deze webhook wordt ontvangen" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Naam van deze webhook" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Actief" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Is deze webhook actief" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Sleutel" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token voor toegang" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Geheim" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Gedeeld geheim voor HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "Bericht ID" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Unieke identificatie voor dit bericht" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Host" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Host waarvan dit bericht is ontvangen" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Koptekst" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Koptekst van dit bericht" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Berichtinhoud" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Inhoud van dit bericht" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Eindpunt waarop dit bericht is ontvangen" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Aan gewerkt" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Is het werk aan dit bericht voltooid?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Id" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Titel" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Koppeling" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Gepubliceerd" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Auteur" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Samenvatting" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Gelezen" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Is dit nieuwsitem gelezen?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Afbeelding" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "Doel type voor deze afbeelding" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "Doel modelnummer voor deze afbeelding" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Aangepaste eenheid" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Eenheid symbool moet uniek zijn" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Naam van de unit moet een geldig id zijn" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Naam van eenheid" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Symbool" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Optionele eenheid symbool" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definitie" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Definitie van eenheid" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Bijlage" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Ontbrekend bestand" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Externe link ontbreekt" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Model type" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "Doel type voor afbeelding" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Bestand als bijlage selecteren" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Opmerking" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Opmerking van bijlage" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Uploaddatum" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Datum waarop het bestand is geüpload" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Bestandsgrootte" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Bestandsgrootte in bytes" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Ongeldig modeltype opgegeven voor bijlage" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Aangepaste staat" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Aangepaste statussen" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Referentie status set" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Status set die met deze aangepaste status wordt uitgebreid" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logische sleutel" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "Staat logische sleutel die gelijk is aan deze staat in zakelijke logica" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Waarde" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "De numerieke waarde die wordt opgeslagen in de modellendatabase" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Naam van de toestand" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Label" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Label dat in de frontend getoond wordt" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Kleur" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Kleur die in de frontend getoond wordt" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Model" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "Model met deze staat is gekoppeld aan" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Het model moet worden gekozen" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "Sleutel moet worden geselecteerd" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "Logische sleutel moet worden geselecteerd" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "Sleutel moet anders zijn dan logische sleutel" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Geldige referentie status klasse moet worden opgegeven" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "Sleutel moet verschillen van de logische sleutels van de referentie status" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "Logische sleutel moet in de logische sleutels van de referentiestatus staan" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "Naam moet anders zijn dan de namen van de referentie status" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Keuzelijst" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Selectielijst" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Naam van de selectielijst" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Beschrijving van de selectielijst" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Vergrendeld" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Is deze selectielijst vergrendeld?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Kan deze selectielijst worden gebruikt?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Bron plug-in" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Plug-in die de selectielijst biedt" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Bron tekenreeks" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Optionele tekenreeks die de bron identificeert die voor deze lijst wordt gebruikt" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Standaard vermelding" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Standaard vermelding voor deze selectielijst" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Gecreëerd" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Datum en tijd waarop de selectielijst is aangemaakt" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Laatst bijgewerkt" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Datum en tijd waarop de selectielijst voor het laatst is bijgewerkt" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Selectielijst item" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Selectielijst item" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Selectielijst waaraan dit item hoort" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Naam van de selectielijst" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Label voor het item in de selectielijst" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Beschrijving van het item in de selectielijst" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "Is dit item in deze lijst actief?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Parameter sjabloon" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "Parameter sjablonen" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Keuzes moeten uniek zijn" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "De template van de parameter moet uniek zijn" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "Doelmodeltype voor dit parametersjabloon" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Parameternaam" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Eenheden" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Fysieke eenheden voor deze parameter" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Parameter omschrijving" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Selectievakje" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Is deze parameter een selectievak?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Keuzes" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "Lijst met selecties voor deze parameter" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Ingeschakeld" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "Is dit parametersjabloon ingeschakeld?" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "Parameter" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "Parameters" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Ongeldige keuze voor parameter waarde" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "Ongeldig modeltype opgegeven voor parameter" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "Model-ID" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "ID van het doelmodel voor deze parameter" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Sjabloon" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "Parameter sjabloon" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Gegevens" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Parameterwaarde" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Opmerking" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Optioneel notities veld" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Barcode Scan" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Barcode gegevens" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Gebruiker die de barcode gescand heeft" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Tijdstempel" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Datum en tijd van de streepjescode scan" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "Adres eindpunt dat de streepjescode verwerkt" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Inhoud" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Contextgegevens voor de barcode scan" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Reactie" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Reactiegegevens van de barcode scan" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultaat" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "Was de barcode succesvol gescand?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "Er is een fout opgetreden" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: E-maillog verwijderen wordt beschermd. Zet INVENTREE_PROTECT_EMAIL_LOG naar False om verwijdering toe te staan." -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "E-mailbericht" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "E-mail berichten" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "Aangekondigd" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "Verzonden" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "Mislukt" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Geleverd" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Bevestigd" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "Inkomend" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "Uitgaand" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Geen antwoord" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "Track levering" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "Track gelezen" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "Track Klik" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "Globaal ID" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificatie voor dit bericht (kan worden geleverd door een extern systeem)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "Discussie ID" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificatie voor deze bericht draad (kan worden geleverd door een extern systeem)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "Gesprek" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "Gekoppeld onderwerp voor dit bericht" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "Prioriteit" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "E-mail gesprekken" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "E-mail gesprekken" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Sleutel" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "Unieke sleutel voor deze thread (gebruikt om de conversatie te identificeren)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "Unieke identificatie voor dit bericht" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "Intern gestart" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "Is dit onderwerp intern gestart?" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "Datum en tijd waarop de conversatie voor het laatst is bijgewerkt" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "Datum en tijd waarop de conversatie voor het laatst is bijgewerkt" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} is geannuleerd" msgid "A order that is assigned to you was canceled" msgstr "Een bestelling die aan u is toegewezen is geannuleerd" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Ontvangen items" @@ -2392,1235 +2391,1243 @@ msgstr "Geeft aan of de instelling overschreven wordt door een omgevingsvariabel msgid "Override" msgstr "Overschrijven" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Is actief" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Openstaande taken" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Geplande taken" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Mislukte taken" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "Taak ID" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Unieke taak ID" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Vergrendel" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Tijdstip van vergrendeling" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Naam van de taak" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Functie" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Functie naam" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumenten" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Taak argumenten" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Trefwoord argumenten" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Taak trefwoord argumenten" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Bestandsnaam" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Model type" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Gebruiker heeft geen toestemming om bijlagen voor dit model te maken of te bewerken" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "Gebruiker heeft geen toestemming om parameters voor dit model te maken of te bewerken" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lijst met selecties is vergrendeld" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Geen groep" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Website URL is vergrendeld door configuratie" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Opnieuw opstarten vereist" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Een instelling is gewijzigd waarvoor een herstart van de server vereist is" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migraties in behandeling" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Aantal nog openstaande database migraties" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Actieve waarschuwingscodes" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Een reeks actieve waarschuwingscodes" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "Instantie Id" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Unieke identificatie voor deze InvenTree instantie" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Aankondiging ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Kondig de instantie ID van de server aan in de server status info (ongeautoriseerd)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "ID Serverinstantie" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Stringbeschrijving voor de server instantie" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Gebruik de instantie naam" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Gebruik de naam van de instantie in de titelbalk" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Tonen `over` beperken" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Toon de `over` modal alleen aan superusers" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Bedrijfsnaam" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Interne bedrijfsnaam" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Basis-URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Basis URL voor serverinstantie" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Standaard Valuta" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Selecteer basisvaluta voor de berekening van prijzen" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Ondersteunde valuta" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Lijst van ondersteunde valuta codes" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Valuta update interval" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Hoe vaak te controleren op updates (nul om uit te schakelen)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "dagen" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Valuta update plug-in" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Munteenheid update plug-in om te gebruiken" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Download van URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Download van afbeeldingen en bestanden vanaf een externe URL toestaan" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Download limiet" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Maximale downloadgrootte voor externe afbeelding" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "User-agent gebruikt om te downloaden van URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Sta toe om de user-agent te overschrijven die gebruikt wordt om afbeeldingen en bestanden van externe URL te downloaden (laat leeg voor de standaard)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Strikte URL validatie" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Vereis schema specificatie bij het valideren van URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Interval voor update" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Hoe vaak te controleren op updates (nul om uit te schakelen)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Automatische backup" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Automatische back-up van database- en mediabestanden inschakelen" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Automatische backup interval" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Geef het aantal dagen op tussen geautomatiseerde backup" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Interval Taak Verwijderen" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Error Log Verwijderings Interval" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Interval Verwijderen Notificatie" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Meldingen van gebruikers worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "E-mail verwijderen interval" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "E-mailberichten zullen worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "Bescherm e-maillogboeken" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "Voorkom het verwijderen van e-mail logs" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Streepjescodeondersteuning" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Schakel barcodescanner ondersteuning in in de webinterface" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Sla de resultaten van de barcode op" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Sla de barcode scan resultaten op in de database" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Maximale aantal Barcode Scans" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Maximum aantal resultaten van de barcode scan op te slaan" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Barcode Invoer Vertraging" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Barcode invoerverwerking vertraging" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Barcode Webcam Ondersteuning" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode via webcam scannen in browser toestaan" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Barcode gegevens" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Geef barcode gegevens weer in browser als tekst" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Streepjescode Plug-in" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Plug-in om te gebruiken voor interne barcode data genereren" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Herzieningen onderdeel" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Revisieveld voor onderdeel inschakelen" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "Alleen assemblee revisie" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "Alleen revisies toestaan voor assemblageonderdelen" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Verwijderen uit Assemblage toestaan" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Verwijderen van onderdelen die in een groep worden gebruikt toestaan" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulier expressiepatroon voor het overeenkomende Onderdeel IPN" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Duplicaat IPN toestaan" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Toestaan dat meerdere onderdelen dezelfde IPN gebruiken" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Bewerken IPN toestaan" -#: common/setting/system.py:435 +#: common/setting/system.py:436 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/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Kopieer Onderdeel Stuklijstgegevens" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopieer standaard stuklijstgegevens bij het dupliceren van een onderdeel" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Kopieer Onderdeel Parametergegevens" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Parametergegevens standaard kopiëren bij het dupliceren van een onderdeel" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Kopieer Onderdeel Testdata" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Testdata standaard kopiëren bij het dupliceren van een onderdeel" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Kopiëer Categorieparameter Sjablonen" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Kopieer categorieparameter sjablonen bij het aanmaken van een onderdeel" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Onderdelen zijn standaard sjablonen" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Onderdeel" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Onderdelen kunnen standaard worden gebruikt als subcomponenten" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Koopbaar" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Onderdelen kunnen standaard gekocht worden" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Verkoopbaar" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Onderdelen kunnen standaard verkocht worden" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Onderdelen kunnen standaard gevolgd worden" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtueel" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Onderdelen zijn standaard virtueel" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Verwante onderdelen tonen" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Verwante onderdelen voor een onderdeel tonen" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Initiële voorraadgegevens" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Aanmaken van eerste voorraad toestaan bij het toevoegen van een nieuw onderdeel" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Initiële leveranciergegevens" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Aanmaken van eerste leveranciersgegevens toestaan bij het toevoegen van een nieuw onderdeel" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Onderdelennaam Weergaveopmaak" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Opmaak om de onderdeelnaam weer te geven" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Standaardicoon voor onderdeel catagorie" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Standaardicoon voor onderdeel catagorie (leeg betekent geen pictogram)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Minimaal aantal prijs decimalen" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimaal aantal decimalen om weer te geven bij het weergeven van prijsgegevens" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Maximum prijs decimalen" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximum aantal decimalen om weer te geven bij het weergeven van prijsgegevens" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Gebruik leveranciersprijzen" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Prijsvoordelen leveranciers opnemen in de totale prijsberekening" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Aankoopgeschiedenis overschrijven" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische order prijzen overschrijven de prijzen van de leverancier" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Gebruik voorraaditem prijzen" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Gebruik prijzen van handmatig ingevoerde voorraadgegevens voor prijsberekeningen" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Voorraad artikelprijs leeftijd" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Voorraaditems ouder dan dit aantal dagen uitsluiten van prijsberekeningen" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Gebruik variantprijzen" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenprijzen opnemen in de totale prijsberekening" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Alleen actieve varianten" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Gebruik alleen actieve variantonderdelen voor het berekenen van variantprijzen" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "Prijzen automatisch bijwerken" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "Automatisch prijzen van onderdelen bijwerken wanneer interne gegevens veranderen" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Prijzen Herbouw interval" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Aantal dagen voordat de prijzen voor onderdelen automatisch worden bijgewerkt" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Interne Prijzen" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Inschakelen van interne prijzen voor onderdelen" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Interne prijs overschrijven" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Indien beschikbaar, interne prijzen overschrijven berekeningen van prijsbereik" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Printen van labels Inschakelen" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Printen van labels via de webinterface inschakelen" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "Label Afbeelding DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 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/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Activeer Rapportages" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Activeer het genereren van rapporten" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Foutopsporingsmodus" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Rapporten genereren in debug modus (HTML uitvoer)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Log fouten" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Registreer fouten die optreden bij het genereren van rapporten" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Paginagrootte" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Standaard paginagrootte voor PDF rapporten" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Forceer Parameter Eenheden" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Als er eenheden worden opgegeven, moeten parameterwaarden overeenkomen met de opgegeven eenheden" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Globaal unieke serienummers" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummers voor voorraaditems moeten globaal uniek zijn" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Verwijder uitgeputte voorraad" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Bepaalt standaard gedrag wanneer een voorraadartikel leeg is" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Batchcode Sjabloon" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Sjabloon voor het genereren van standaard batchcodes voor voorraadartikelen" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Verlopen Voorraad" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Verlopen voorraad functionaliteit inschakelen" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Verkoop Verlopen Voorraad" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Verkoop verlopen voorraad toestaan" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Voorraad Vervaltijd" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Aantal dagen voordat voorraadartikelen als verouderd worden beschouwd voor ze verlopen" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Produceer Verlopen Voorraad" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Sta productie met verlopen voorraad toe" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Voorraad Eigenaar Toezicht" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Eigenaarstoezicht over voorraadlocaties en items inschakelen" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Voorraadlocatie standaard icoon" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Standaard locatie pictogram (leeg betekent geen icoon)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Geïnstalleerde voorraad items weergeven" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Geïnstalleerde voorraadartikelen in voorraadtabellen tonen" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Controleer BOM bij het installeren van items" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Geïnstalleerde voorraad items moeten in de BOM voor het bovenliggende deel bestaan" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Sta 'Niet op voorraad overschrijving' toe" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Toestaan dat voorraadartikelen die niet op voorraad zijn worden overgebracht tussen voorraadlocaties" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Productieorderreferentiepatroon" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Vereist patroon voor het genereren van het Bouworderreferentieveld" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Vereis verantwoordelijke eigenaar" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Een verantwoordelijke eigenaar moet worden toegewezen aan elke bestelling" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Vereist een actief onderdeel" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Voorkom het maken van orders voor inactieve onderdelen" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Vergrendeld onderdeel vereisen" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Voorkom het maken van orders voor ontgrendelde onderdelen" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "Vereist een geldige BOM" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Voorkom het creëren van bouworders tenzij BOM is gevalideerd" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "Onderliggende bestellingen vereist" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Voorkom voltooiing van de bouw tot alle sub orders gesloten zijn" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "Externe Bouw Orders" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "Inschakelen externe build order functionaliteit" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Blokkeren tot test geslaagd" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Voorkom dat de bouw van de uitvoer wordt voltooid totdat alle vereiste testen zijn geslaagd" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Retourorders inschakelen" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Retourorder functionaliteit inschakelen in de gebruikersinterface" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Retourorder referentie patroon" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Verplicht patroon voor het genereren van Retourorder referentie veld" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Bewerk voltooide retourorders" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Bewerken van retourorders toestaan nadat deze zijn voltooid" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Verkooporderreferentiepatroon" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Vereist patroon voor het genereren van het Verkooporderreferentieveld" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Standaard Verzending Verkooporder" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Aanmaken standaard verzending bij verkooporders inschakelen" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Bewerk voltooide verkooporders" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Bewerken van verkooporders toestaan nadat deze zijn verzonden of voltooid" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "Zending moet gecontroleerd worden" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "Voorkom voltooiing van verzendingen totdat items zijn gecontroleerd" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Verstuurde bestellingen markeren als voltooid" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Verkooporders gemarkeerd als verzonden zullen automatisch worden voltooid, zonder de status \"verzonden\"" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Inkooporderreferentiepatroon" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Vereist patroon voor het genereren van het Inkooporderreferentieveld" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Bewerk voltooide verkooporders" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Bewerken van inkooporders toestaan nadat deze zijn verzonden of voltooid" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Valuta converteren" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "Verander artikelwaarde naar basisvaluta bij het ontvangen van voorraad" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Inkooporders automatisch voltooien" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Markeer orders automatisch als voltooid wanneer alle regelitems worden ontvangen" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Wachtwoord vergeten functie inschakelen" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Wachtwoord vergeten functie inschakelen op de inlogpagina's" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Registratie inschakelen" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Zelfregistratie voor gebruikers op de inlogpagina's inschakelen" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "SSO inschakelen" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "SSO inschakelen op de inlogpagina's" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Schakel gebruikersregistratie met SSO in" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Zelfregistratie voor gebruikers middels SSO op de inlogpagina's inschakelen" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "SSO-groep synchroniseren inschakelen" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Inschakelen van het synchroniseren van InvenTree groepen met groepen geboden door de IdP" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "SSO groep sleutel" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "De naam van de groepen claim attribuut van de IdP" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "SSO groep kaart" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Een mapping van SSO-groepen naar lokale InvenTree groepen. Als de lokale groep niet bestaat, zal deze worden aangemaakt." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Verwijder groepen buiten SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Of groepen die zijn toegewezen aan de gebruiker moeten worden verwijderd als ze geen backend zijn door de IdP. Het uitschakelen van deze instelling kan beveiligingsproblemen veroorzaken" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "E-mailadres verplicht" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Vereis gebruiker om e-mailadres te registreren bij aanmelding" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "SSO-gebruikers automatisch invullen" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Gebruikersdetails van SSO-accountgegevens automatisch invullen" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "E-mail twee keer" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Bij inschrijving gebruikers twee keer om hun e-mail vragen" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Wachtwoord tweemaal" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Laat gebruikers twee keer om hun wachtwoord vragen tijdens het aanmelden" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Toegestane domeinen" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Inschrijven beperken tot bepaalde domeinen (komma-gescheiden, beginnend met @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Groep bij aanmelding" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Groep waaraan nieuwe gebruikers zijn toegewezen op registratie. Als SSO-groepssynchronisatie is ingeschakeld, is deze groep alleen ingesteld als er geen groep vanuit de IdP kan worden toegewezen." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "MFA afdwingen" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Gebruikers moeten multifactor-beveiliging gebruiken." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Het inschakelen van deze instelling zal ervoor zorgen dat alle gebruikers multifactor authenticatie instellen. Alle sessies worden onmiddellijk verbroken." -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Controleer plugins bij het opstarten" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Controleer of alle plug-ins zijn geïnstalleerd bij het opstarten - inschakelen in container-omgevingen" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Controleren op plug-in updates" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Schakel periodieke controles voor updates voor geïnstalleerde plug-ins in" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Activeer URL-integratie" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Plugins toestaan om URL-routes toe te voegen" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Activeer navigatie integratie" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Plugins toestaan om te integreren in navigatie" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Activeer app integratie" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Activeer plug-ins om apps toe te voegen" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Activeer planning integratie" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Activeer plugin om periodiek taken uit te voeren" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Activeer evenement integratie" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Activeer plugin om op interne evenementen te reageren" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Interface integratie activeren" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Plug-ins inschakelen om te integreren in de gebruikersinterface" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "E-mail integratie inschakelen" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Schakel plug-ins in om uitgaande / inkomende mails te verwerken" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "Activeer project codes" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Schakel projectcodes in voor het bijhouden van projecten" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" -msgstr "" +msgstr "Voorraadcontrole inschakelen" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "Functionaliteit voor het opnemen van historische voorraadniveaus en -waarde inschakelen" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Externe locaties uitsluiten" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" +msgstr "Voorraadartikelen op externe locaties uitsluiten van voorraadberekeningen" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Automatische Voorraadcontrole Periode" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" -msgstr "" +msgstr "Aantal dagen tussen automatische voorraadgegevens opnemen" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" -msgstr "" +msgstr "Oude voorraadgegevens verwijderen" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1133 -msgid "Stocktake Deletion Interval" -msgstr "" - -#: common/setting/system.py:1135 -msgid "Stocktake entries will be deleted after specified number of days" -msgstr "" +msgstr "Voorraadgegevens verwijderen die ouder zijn dan het opgegeven aantal dagen" #: common/setting/system.py:1142 +msgid "Stocktake Deletion Interval" +msgstr "Interval Voorraadgegevens verwijderen" + +#: common/setting/system.py:1144 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "Voorraadgegevens zal worden verwijderd na het opgegeven aantal dagen" + +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" -msgstr "" +msgstr "Inverval voor verwijderen van voorraadtracking" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Gebruikers volledige namen weergeven" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Laat gebruikers volledige namen zien in plaats van gebruikersnamen" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "Gebruikersprofielen tonen" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "Toon gebruikersprofielen op hun profielpagina" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Inschakelen van teststation data" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Schakel teststation gegevensverzameling in voor testresultaten" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "Machine Ping inschakelen" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Schakel periodieke ping taak van geregistreerde machines in om hun status te controleren" @@ -3965,346 +3972,346 @@ msgstr "Onderdeel is actief" msgid "Manufacturer is Active" msgstr "Fabrikant is actief" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "Leveranciersonderdelen is actief" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" -msgstr "" +msgstr "Primaire leverancierdeel" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "Intern onderdeel is actief" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "Leverancier is actief" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabrikant" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Bedrijf" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Heeft voorraad" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Bedrijven" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Bedrijf omschrijving" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Omschrijving van het bedrijf" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Website" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "URL bedrijfswebsite" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Telefoonnummer" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Telefoonnummer voor contact" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Contact e-mailadres" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contact" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Contactpunt" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link naar externe bedrijfsinformatie" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Is dit bedrijf actief?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Is klant" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Verkoop je artikelen aan dit bedrijf?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Is leverancier" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Koop je artikelen van dit bedrijf?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Is fabrikant" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Fabriceert dit bedrijf onderdelen?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Standaardvaluta die gebruikt wordt voor dit bedrijf" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "Btw-nr" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "BTW-nummer van bedrijf" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Adres" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Adres" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Selecteer bedrijf" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Adres titel" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Titel die het adres beschrijft" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Primair adres" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Instellen als primair adres" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Lijn 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Adresregel 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Lijn 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Adresregel 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Post code" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Plaats/regio" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Postcode plaats/regio" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Staat/provincie" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Staat of provincie" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Land" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Adres land" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Koerier verzend notities" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Opmerkingen voor verzending koerier" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Interne verzend notities" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Verzend notities voor intern gebruik" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link naar adres gegevens (extern)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Fabrikant onderdeel" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Basis onderdeel" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Onderdeel selecteren" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Fabrikant selecteren" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "Fabrikant artikel nummer" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Fabrikant artikel nummer (MPN)" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL voor externe link van het fabrikant onderdeel" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Omschrijving onderdeel fabrikant" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Pakket eenheden moeten compatibel zijn met de basis onderdeel eenheden" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Leverancier" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Leverancier selecteren" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Voorraad beheers eenheid voor leveranciers" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Is dit leveranciersdeel actief?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" -msgstr "" +msgstr "Primair" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Selecteer fabrikant onderdeel" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL voor link externe leveranciers onderdeel" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Omschrijving leveranciersdeel" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "basisprijs" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Verpakking" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Onderdeel verpakking" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Pakket hoeveelheid" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Totale hoeveelheid geleverd in één pakket. Laat leeg voor enkele afzonderlijke items." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "meerdere" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Order meerdere" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Beschikbare hoeveelheid van leverancier" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Beschikbaarheid bijgewerkt" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Datum van de laatste update van de beschikbaarheid gegevens" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Prijsverschil van leverancier" @@ -4316,7 +4323,7 @@ msgstr "Standaardvaluta die gebruikt wordt voor deze leverancier" msgid "Company Name" msgstr "Bedrijfsnaam" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Op voorraad" @@ -4452,7 +4459,7 @@ msgstr "Veld bestaat niet in het doel model" msgid "Selected field is read-only" msgstr "Geselecteerde veld is alleen lezen" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Importeer sessie" @@ -4464,31 +4471,31 @@ msgstr "Veld" msgid "Column" msgstr "Kolom" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Rij index" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Oorspronkelijke rij gegevens" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Fouten" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Geldig" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "ID is vereist voor het bijwerken van bestaande records." -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Geen record gevonden met het opgegeven ID" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Ongeldig ID formaat opgegeven" @@ -4588,7 +4595,7 @@ msgstr "Aantal afdrukken voor elk label" msgid "Connected" msgstr "Verbonden" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Onbekend" @@ -4716,105 +4723,117 @@ msgstr "Maximale voortgang" msgid "Maximum value for progress type, required if type=progress" msgstr "Maximale waarde voor voortgangsttype, vereist als type=progress" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Order Referentie" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Uitmuntend" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Heeft een projectcode" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Aangemaakt Door" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Gemaakt vóór" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Gemaakt na" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "Heeft vervaldatum" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "Vervaldatum voor" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "Vervaldatum na" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "Heeft doel datum" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Doel datum voor" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Doel datum na" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "Bijgewerkt voor" + +#: order/api.py:234 +msgid "Updated After" +msgstr "Bijgewerkt na" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Heeft prijsstelling" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Voltooid voor" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Voltooid na" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "Externe Bouw Opdracht" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Bestellen" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Bestelling voltooid" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Intern onderdeel" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Bestelling in behandeling" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Voltooid" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Heeft verzending" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Inkooporder" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Inkooporder" msgid "Sales Order" msgstr "Verkooporder" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Totaalprijs" msgid "Total price for this order" msgstr "Totaalprijs van deze bestelling" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Valuta bestelling" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta voor deze order (laat leeg om de standaard van het bedrijf te gebruiken)" @@ -4851,719 +4870,743 @@ msgstr "Valuta voor deze order (laat leeg om de standaard van het bedrijf te geb msgid "This order is locked and cannot be modified" msgstr "Deze bestelling is vergrendeld en kan niet worden gewijzigd" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Contact komt niet overeen met het geselecteerde bedrijf" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Startdatum moet voor einddatum liggen" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "Adres komt niet overeen met het geselecteerde bedrijf" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Bestelling beschrijving (optioneel)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Selecteer projectcode voor deze bestelling" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Link naar externe pagina" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Start datum" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Geplande startdatum voor deze bestelling" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Streefdatum" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Verwachte datum voor levering van de bestelling. De bestelling wordt achterstallig na deze datum." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Datum van uitgifte" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Order uitgegeven op datum" #: order/models.py:506 +msgid "Updated At" +msgstr "Bijgewerkt op" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Gebruiker of groep verantwoordelijk voor deze order" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Contactpunt voor deze volgorde" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Bedrijf adres voor deze bestelling" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Orderreferentie" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Inkooporder status" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Bedrijf waar de artikelen van worden besteld" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Leveranciersreferentie" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Order referentiecode van leverancier" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "ontvangen door" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Order voltooid op datum" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Bestemming" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Bestemming voor ontvangen items" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Onderdeelleverancier moet overeenkomen met de Inkooporderleverancier" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Regelitem mist een gekoppeld deel" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Hoeveelheid moet een positief getal zijn" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klant" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Bedrijf waaraan de artikelen worden verkocht" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Verkooporder status" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Klantreferentie " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Klant order referentiecode" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Verzenddatum" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "verzonden door" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "Bestelling is al afgerond" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "Order is al geannuleerd" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Alleen een open bestelling kan als voltooid worden gemarkeerd" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Bestelling kan niet worden voltooid omdat er onvolledige verzendingen aanwezig zijn" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Order kan niet worden voltooid omdat er onvolledige artikelen aanwezig zijn" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "Order kan niet worden voltooid omdat er onvolledige artikelen aanwezig zijn" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "De bestelling is vergrendeld en kan niet worden gewijzigd" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Hoeveelheid artikelen" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Artikelregel referentie" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Artikel notities" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Doeldatum voor dit regelitem (laat leeg om de doeldatum van de bestelling te gebruiken)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Regelomschrijving (optioneel)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Additionele context voor deze regel" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Stukprijs" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "Inkooporder regel item" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "Leveranciersonderdeel moet overeenkomen met leverancier" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "Bouw bestelling moet worden gemarkeerd als extern" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "Bestellingen kunnen alleen aan assemblageonderdelen worden gekoppeld" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "De bouw van het order deel moet overeenkomen met regel onderdeel" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Leveranciersonderdeel" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Ontvangen" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Aantal ontvangen artikelen" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Inkoopprijs" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Aankoopprijs per stuk" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "Externe Build Order moet aan deze regel voldoen" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "Extra regel inkooporder" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "Verkooporder regel item" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Alleen verkoopbare onderdelen kunnen aan een verkooporder worden toegewezen" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Verkoopprijs" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Prijs per stuk" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Verzonden" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Verzonden hoeveelheid" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "Verzending van verkooporder" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "Verzendadres moet overeenkomen met de klant" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "Verzendadres voor deze zending" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Datum van verzending" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Leveringsdatum" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Datum van levering van zending" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Gecontroleerd door" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Zending" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Zendingsnummer" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Volgnummer" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Zending volginformatie" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Factuurnummer" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Referentienummer voor bijbehorende factuur" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Verzending is al verzonden" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Zending heeft geen toegewezen voorraadartikelen" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "Verzending moet worden gecontroleerd voordat deze kan worden voltooid" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "Verkooporder extra regel" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "Toewijzing verkooporder" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "Voorraadartikel is niet toegewezen" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Kan het voorraadartikel niet toewijzen aan een regel met een ander onderdeel" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Kan voorraad niet toewijzen aan een regel zonder onderdeel" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Verkooporder komt niet overeen met zending" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Verzending komt niet overeen met verkooporder" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Regel" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Verzendreferentie verkooporder" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Artikel" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Selecteer voorraadartikel om toe te wijzen" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Voer voorraadtoewijzingshoeveelheid in" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Retour order referentie" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Bedrijf van waaruit items worden teruggestuurd" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Retour bestelling status" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "Retourneer bestelregel item" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "Voorraad item moet worden opgegeven" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "Retour hoeveelheid overschrijdt voorraad hoeveelheid" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "Het retour aantal moet groter zijn dan nul" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "Ongeldige hoeveelheid voor geserialiseerde voorraad" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Selecteer te retourneren product van de klant" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Ontvangst datum" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "De datum waarop dit retour item is ontvangen" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Resultaat" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Resultaat van deze regel item" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Kosten geassocieerd met teruggave of reparatie voor deze regel item" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "Retourneren extra regel" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "Bestelling ID" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID van de bestelling om te dupliceren" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Kopieer regels" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Kopieer regelitems uit de oorspronkelijke bestelling" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Extra regels kopiëren" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Extra regelitems van de oorspronkelijke bestelling kopiëren" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Parameters kopiëren" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Artikelen" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Afgeronde regel items" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Artikel dupliceren" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Specificeer opties voor het dupliceren van deze bestelling" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Ongeldige order ID" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Leveranciers Naam" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Toestaan order te sluiten met onvolledige regelitems" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "Bestelling heeft onvolledige regelitems" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "Order is niet open" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Automatisch prijzen" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Koopprijs automatisch berekenen gebaseerd op leveranciers \n" " onderdelen gegevens" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Valuta Inkoopprijs" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Items samenvoegen" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Items met hetzelfde onderdeel, bestemming en doeldatum samenvoegen in één regelitem" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Intern Onderdeelnummer" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Interne naam onderdeel" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Leveranciersonderdeel moet worden gespecificeerd" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Inkooporder moet worden gespecificeerd" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "De leverancier moet overeenkomen met de inkooporder" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Artikel" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Voer batch code in voor inkomende voorraad items" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Vervaldatum" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "Voer vervaldatum in voor inkomende voorraad items" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Voer serienummers in voor inkomende voorraadartikelen" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "Overschrijf verpakkingsinformatie voor binnenkomende voorraad" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "Extra opmerking voor inkomende voorraad items" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Streepjescode" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Gescande streepjescode" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Streepjescode is al in gebruik" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Verzendingen" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Voltooide Verzendingen" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" -msgstr "" +msgstr "Toegewezen lijnen" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Toegewezen items" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Artikelregel is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "Zending is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "De volgende serienummers zijn niet beschikbaar" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Retourneer regel item" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Regel item is al ontvangen" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Artikelen kunnen alleen worden ontvangen tegen lopende bestellingen" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "Hoeveelheid te retourneren" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Lijn prijs valuta" @@ -5599,146 +5642,146 @@ msgstr "Restitutie" msgid "Reject" msgstr "Afwijzen" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Achterstallige inkooporder" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Inkooporder {po} is nu achterstallig" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Achterstallige Verkooporder" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Verkooporder {so} is nu achterstallig" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Achterstallige retour orders" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "Productieorder {ro} is nu achterstallig" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Favoriet" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filter op categorieën met ster" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Diepte" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filteren op categorie diepte" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Hoogste niveau" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filteren op topniveau categorieën" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Stapelen" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Inclusief subcategorieën in gefilterde resultaten" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Bovenliggend" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filter op bovenliggende categorie" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Subcategorieën uitsluiten in de opgegeven categorie" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Heeft resultaten" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Is een variant" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Is revisie" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Heeft revisies" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "BOM Valid" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Cascade Categorieën" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Indien waar, inclusief items op de onderliggende categorieën van de opgegeven categorie" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filter op numerieke categorie-ID of de letterlijke 'null'" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" -msgstr "" +msgstr "Bouw onderdeel is actief" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" -msgstr "" +msgstr "Bouw onderdeel is te volgen" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Assemblage deel is testbaar" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" -msgstr "" +msgstr "Onderdeel is actief" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" -msgstr "" +msgstr "Onderdeel is trackable" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "Component onderdeel is testbaar" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" -msgstr "" +msgstr "Onderdeel is nog te bouwen" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" -msgstr "" +msgstr "Onderdeel is virtueel" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" -msgstr "" +msgstr "Heeft beschikbare voorraad" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Gebruik" @@ -5751,7 +5794,7 @@ msgstr "Onderdeel Categorie" msgid "Part Categories" msgstr "Onderdeel Categorieën" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Standaard locatie" @@ -5779,7 +5822,7 @@ msgstr "Standaard trefwoorden voor delen in deze categorie" msgid "Icon" msgstr "Pictogram" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Pictogram (optioneel)" @@ -5800,7 +5843,7 @@ msgstr "Standaard waarde" msgid "Default Parameter Value" msgstr "Standaard Parameter Waarde" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Onderdelen" @@ -5844,981 +5887,978 @@ msgid "Part cannot be a revision of itself" msgstr "Onderdeel kan geen herziening van zichzelf zijn" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "Kan geen revisie maken van een onderdeel dat al een revisie is" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "Revisie code moet worden opgegeven" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "Herzieningen zijn alleen toegestaan voor assemblageonderdelen" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "Kan geen revisie maken van een sjabloon onderdeel" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "Bovenliggend onderdeel moet naar dezelfde sjabloon verwijzen" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Voorraadartikel met dit serienummer bestaat al" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "Dubbele IPN niet toegestaan in deelinstellingen" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "Dubbele onderdeel revisie bestaat al." -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Onderdeel met deze naam, IPN en Revisie bestaat al." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Onderdelen kunnen niet worden toegewezen aan categorieën van structurele onderdelen!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Onderdeel naam" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Is een sjabloon" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Is dit deel van een sjabloon?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Is dit een variant van een ander deel?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Variant van" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Beschrijving (optioneel)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Sleutelwoorden" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Deel sleutelwoorden om de zichtbaarheid van de zoekresultaten te verbeteren" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Onderdeel Categorie" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Onderdeel revisie of versienummer" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Revisie" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "Is dit deel een herziening van een ander deel?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Revisie van" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Waar wordt dit item normaal opgeslagen?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Standaard verval datum" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Verlooptijd (in dagen) voor voorraadartikelen van dit deel" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimum voorraad" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Minimaal toegelaten stock niveau" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Eenheden voor dit onderdeel" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Kan dit onderdeel uit andere delen worden gebouwd?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Kan dit onderdeel gebruikt worden om andere onderdelen te bouwen?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Heeft dit onderdeel een tracking voor unieke items?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "Kunnen de testresultaten van dit onderdeel tegen dit onderdeel worden geregistreerd?" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Kan dit onderdeel worden gekocht van externe leveranciers?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Kan dit onderdeel aan klanten worden verkocht?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Is dit onderdeel actief?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Vergrendelde onderdelen kunnen niet worden bewerkt" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "Is dit een virtueel onderdeel, zoals een softwareproduct of licentie?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "Stuklijst BOM gecontroleerd" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "Is de BOM voor dit deel geldig?" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "BOM checksum" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Checksum van BOM opgeslagen" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "BOM gecontroleerd door" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "BOM gecontroleerd datum" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Aanmaken gebruiker" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Eigenaar verantwoordelijk voor dit deel" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Verkopen van meerdere" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Valuta die gebruikt wordt voor de cache berekeningen" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Minimale BOM kosten" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Minimale kosten van onderdelen" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Maximale BOM kosten" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Maximale kosten van onderdelen" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Minimale aankoop kosten" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Minimale historische aankoop kosten" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Maximale aanschaf kosten" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Maximum historische aankoop kosten" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Minimale interne prijs" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Minimale kosten op basis van interne prijsschommelingen" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Maximale interne prijs" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Maximale kosten gebaseerd op interne prijsvoordelen" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Minimale leverancier prijs" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Minimale prijs van onderdeel van externe leveranciers" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Maximale leverancier prijs" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Maximale prijs van onderdeel van externe leveranciers" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Minimale variant kosten" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Berekende minimale kosten van variant onderdelen" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Maximale variant kosten" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Berekende maximale kosten van variant onderdelen" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Minimale kostprijs" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Overschrijf minimale kosten" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Maximale kosten" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Overschrijf maximale kosten" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Berekende minimale kosten" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Berekende totale maximale kosten" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Minimale verkoop prijs" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Minimale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Maximale verkoop prijs" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Maximale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Minimale verkoop prijs" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Minimale historische verkoop prijs" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Maximale verkoop prijs" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Maximale historische verkoop prijs" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Onderdeel voor voorraadcontrole" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Getelde items" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Aantal individuele voorraadvermeldingen op het moment van voorraadcontrole" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Totale voorraad op het moment van voorraadcontrole" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Datum waarop voorraad werd uitgevoerd" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Minimale voorraadprijs" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Geschatte minimum kosten van de voorraad op de hand" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Maximale voorraadkosten" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Geschatte maximale kosten van de hand van voorraad" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "Periodieke verkoopprijs voor onderdelen" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "Sjabloon test onderdeel" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Ongeldige sjabloonnaam - moet minstens één alfanumeriek teken bevatten" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Test sjablonen kunnen alleen worden gemaakt voor testbare onderdelen" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "Test template met dezelfde sleutel bestaat al voor een deel" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Test naam" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Geef een naam op voor de test" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "Test sleutel" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "Vereenvoudigde sleutel voor de test" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Test beschrijving" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Voer beschrijving in voor deze test" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "Is deze test ingeschakeld?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Vereist" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Is deze test nodig om te doorlopen?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Waarde vereist" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Heeft deze test een waarde nodig bij het toevoegen van een testresultaat?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Vereist bijlage" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Vereist deze test een bestandsbijlage bij het toevoegen van een testresultaat?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld " -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Selecteer boven liggend onderdeel" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Sub onderdeel" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Selecteer onderdeel dat moet worden gebruikt in BOM" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "BOM hoeveelheid voor dit BOM item" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Dit BOM item is optioneel" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Dit BOM item is verbruikbaar (het wordt niet bijgehouden in build orders)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "Totale hoeveelheid" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Extra benodigde hoeveelheid voor een build, rekening houdend met verliezen van de setup" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "Attriatie" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Geschatte uitstraling voor een gebouw, uitgedrukt in percentage (0-100)" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "Afronden meerdere" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Afronden met omhoog vereiste productiehoeveelheid naar dichtstbijzijnde meerdere van deze waarde" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Artikelregel referentie" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "BOM item notities" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Controle som" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "BOM lijn controle som" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Goedgekeurd" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Dit BOM item is goedgekeurd" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Wordt overgenomen" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Dit BOM item wordt overgenomen door BOMs voor variant onderdelen" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Voorraaditems voor variant onderdelen kunnen worden gebruikt voor dit BOM artikel" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Hoeveelheid moet een geheel getal zijn voor trackable onderdelen" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Onderdeel moet gespecificeerd worden" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "BOM Item vervangingen bewerken" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "Vervanging onderdeel kan niet hetzelfde zijn als het hoofddeel" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Bovenliggend BOM item" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Vervanging onderdeel" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Eerste deel" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Tweede deel" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Selecteer gerelateerd onderdeel" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Opmerking voor deze relatie" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Onderdeel relatie kan niet worden gecreëerd tussen een deel en zichzelf" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Dubbele relatie bestaat al" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Bovenliggende categorie" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Bovenliggende onderdeel categorie" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Subcategorieën" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Resultaten" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Aantal resultaten opgenomen ten opzichte van deze template" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Bestand is geen afbeelding" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Oorspronkelijk onderdeel" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Selecteer origineel onderdeel om te dupliceren" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Afbeelding kopiëren" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copy BOM" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Kopieer materiaal van het oorspronkelijke deel" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Parameters kopiëren" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Parameter data kopiëren van het originele onderdeel" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Notities kopiëren" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Kopieer notities van het originele deel" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Tests kopiëren" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Test sjablonen kopiëren van het originele deel" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Eerste voorraad hoeveelheid" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Specificeer de initiële voorraad hoeveelheid voor dit onderdeel. Als het aantal nul is, wordt er geen voorraad toegevoegd." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Eerste voorraad locatie" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Specificeer locatie van de eerste voorraad voor dit onderdeel" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Selecteer leverancier (of laat leeg om niets in te vullen)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecteer fabrikant (of laat leeg om niets in te vullen)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Fabrikant artikel nummer" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Geselecteerde onderneming is geen geldige leverancier" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Geselecteerde bedrijf is geen geldige fabrikant" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Fabrikant deel dat overeenkomt met deze MPN bestaat al" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Leveranciersdeel dat overeenkomt met deze SKU bestaat al" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Categorie naam" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Bouwen" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Hoeveelheid van dit deel dat momenteel in productie is" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Er zal een onuitputtelijke hoeveelheid van dit deel worden gebouwd" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Voorraadartikelen" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "Revisies" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Totale Voorraad" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Niet toegewezen voorraad" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Variant voorraad" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Dupliceer onderdeel" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kopieer eerste gegevens uit een ander onderdeel" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Eerste voorraad" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Maak onderdeel met eerste voorraad" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Leveranciersgegevens" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Aanvankelijke leveranciersinformatie voor dit deel toevoegen" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Categorie parameters kopiëren" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Parameter sjablonen kopiëren uit geselecteerde onderdeel categorie" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Bestaande afbeelding" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Bestandsnaam van een bestaande onderdeel afbeelding" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Afbeeldingsbestand bestaat niet" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Valideer de gehele materiaalbon" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Kan bouwen" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Vereist voor bouworders" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Toegewezen aan bouwen van orders" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Vereist voor verkooporders" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" -msgstr "" +msgstr "IPN onderdeel" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" -msgstr "" +msgstr "Onderdeel omschrijving" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" -msgstr "" +msgstr "Rapport Maken" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minimale prijs" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Overschrijf berekende waarde voor minimale prijs" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Minimale prijs valuta" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Maximale prijs" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Overschrijf de berekende waarde voor de maximale prijs" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Maximale prijs valuta" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Bijwerken" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Prijzen voor dit onderdeel bijwerken" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Kan niet converteren van de verstrekte valuta naar {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Minimumprijs mag niet hoger zijn dan de maximale prijs" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Maximale prijs mag niet lager zijn dan de minimale prijs" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Selecteer de bovenliggende assemblage" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Selecteer het onderdeel" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Selecteer onderdeel om BOM van te kopiëren" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Bestaande gegevens verwijderen" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Verwijder bestaande BOM items voor het kopiëren" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Inclusief overgenomen" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclusief stuklijst BOM items die worden overgenomen van getemplated onderdelen" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Ongeldige regels overslaan" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Schakel deze optie in om ongeldige rijen over te slaan" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Verwijder vervangend deel" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopieer vervangende onderdelen bij dubbele stuklijst BOM items" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Lage voorraad melding" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "De beschikbare voorraad voor {part.name} is onder het ingestelde minimumniveau gedaald" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Lage voorraad melding" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "U heeft 1 voorraad product dat de vervaldatum nadert" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "U hebt {item_count} voorraaditems die hun vervaldatum naderen" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Geen vervaldatum" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "{abs(days_diff)} dagen geleden" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Verloopt vandaag" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} dagen" @@ -7581,64 +7621,77 @@ msgstr "Biedt ondersteuning voor het scannen van TME barcodes " msgid "The Supplier which acts as 'TME'" msgstr "De leverancier die als \"TME” optreedt " -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Alleen medewerker gebruikers kunnen plug-ins beheren" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Plug-in installatie is uitgeschakeld" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plug-in succesvol geïnstalleerd" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plug-in geïnstalleerd in {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "De plug-in is niet gevonden in het register" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "De plug-in is geen verpakte plug-in" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Naam van plug-in pakket niet gevonden" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Alleen medewerker gebruikers kunnen plug-ins beheren" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Verwijderen van plug-in is uitgeschakeld" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "De plug-in kan niet worden verwijderd omdat deze momenteel actief is" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "De plug-in kan niet gedeïnstalleerd worden omdat deze verplicht is" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "De plug-in kan niet worden gedeïnstalleerd omdat het een voorbeeld plug-in is" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "De plug-in kan niet worden gedeïnstalleerd omdat het een ingebouwde plug-in is" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "De plug-in is niet geïnstalleerd" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Plug-in installatie niet gevonden" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Deïnstalleerde plug-in succesvol" @@ -7690,21 +7743,21 @@ msgstr "Pakket plug-in" msgid "Plugin" msgstr "Plug-in" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Geen auteur gevonden" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "De plug-in '{p}' is niet compatibel met de huidige InvenTree versie {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "De plug-in vereist minimaal versie {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Plug-in vereist op de hoogste versie {v}" @@ -7885,51 +7938,51 @@ msgstr "Installatie niet bevestigd" msgid "Either packagename or URL must be provided" msgstr "Ofwel de pakketnaam van de URL moet worden opgegeven" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Volledige herladen" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Herlaad het plug-in register volledig" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Herladen forceren" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Forceer herladen van het plug-in register, zelfs als het al geladen is" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Plug-ins ophalen" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Verzamel plug-ins en voeg ze toe aan het register" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Activeer plug-in" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Deze plug-in activeren" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Verplichte plug-in kan niet worden gedeactiveerd" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Configuratie verwijderen" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Verwijder de plug-in configuratie uit de database" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "De gebruiker waarvoor deze instelling van toepassing is" @@ -8191,7 +8244,7 @@ msgstr "Totaal" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serienummer" @@ -8216,7 +8269,7 @@ msgstr "Rapport voorraadcontrole" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Geïnstalleerde items" @@ -8249,186 +8302,198 @@ msgstr "Geen resultaat (verplicht)" msgid "No result" msgstr "Geen resultaat" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Asset bestand bestaat niet" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Afbeelding bestand niet gevonden" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "part_image tag vereist een onderdeel instantie" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "bedrijf_imagetag vereist een bedrijfsinstantie" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filter op locatie diepte" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Filter op topniveau locaties" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Inclusief sublocaties in gefilterde resultaten" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Bovenliggende locatie" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filter op bovenliggende locatie" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Naam van onderdeel (hoofdletter ongevoelig)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Naam van onderdeel bevat (hoofdletter ongevoelig)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Naam onderdeel (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Deel IPN (hoofdletter ongevoelig)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Onderdeel IPN bevat (hoofdletter ongevoelig)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Deel IPN (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Minimale voorraad" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Maximale voorraad" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Status code" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Externe locatie" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Verbruikt door productieorder" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Geïnstalleerd in een ander voorraadartikel" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Boomstructuur onderdeel" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Eerder bijgewerkt" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Bijgewerkt na" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Voorraadcontrole voor" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Voorraadcontrole na" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Vervaldatum voor" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Vervaldatum na" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Verouderd" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Voorraad PK om dit item en al zijn afstammelingen uit te sluiten" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "Cascade locaties" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "Indien waar, inclusief items op de onderliggende locaties van de opgegeven locatie" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Filter op numerieke locatie ID of de letterlijke 'null'" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Hoeveelheid is vereist" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Geldig onderdeel moet worden opgegeven" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Het opgegeven leveranciers onderdeel bestaat niet" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Het leveranciersdeel heeft een pakketgrootte gedefinieerd, maar vlag use_pack_size niet ingesteld" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serienummers kunnen niet worden meegeleverd voor een niet traceerbaar onderdeel" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "Inclusief geïnstalleerde" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "Als correct, geef testresultaten voor items die onder het opgegeven voorraadartikel zijn geïnstalleerd" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "Filter op numerieke voorraadartikel ID" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "Voorraadartikel met ID {id} bestaat niet" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" -msgstr "" +msgstr "Inclusief Onderdeel varianten" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" -msgstr "" +msgstr "Datum na" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" -msgstr "" +msgstr "Datum voor" #: stock/models.py:73 msgid "Stock Location type" @@ -8442,7 +8507,7 @@ msgstr "Voorraad locatie soorten" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Standaardpictogram voor alle locaties waarvoor geen pictogram is ingesteld (optioneel)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Voorraadlocatie" @@ -8450,11 +8515,11 @@ msgstr "Voorraadlocatie" msgid "Stock Locations" msgstr "Voorraadlocaties" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Eigenaar" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Selecteer eigenaar" @@ -8482,274 +8547,274 @@ msgstr "Voorraad locatie type van deze locatie" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "U kunt deze voorraadlocatie niet structureel maken omdat sommige voorraadartikelen er al in liggen!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field} bestaat niet" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Onderdeel moet gespecificeerd worden" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Voorraaditems kunnen niet worden geplaatst in structurele voorraadlocaties!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Voorraadartikel kan niet worden aangemaakt voor virtuele onderdelen" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Onderdeel type ('{self.supplier_part.part}') moet {self.part} zijn" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Hoeveelheid moet 1 zijn voor item met een serienummer" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Serienummer kan niet worden ingesteld als de hoeveelheid groter is dan 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Item kan niet tot zichzelf behoren" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Item moet een bouw referentie hebben als is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Bouw referentie verwijst niet naar hetzelfde deel object" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Bovenliggend voorraad item" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Basis onderdeel" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Selecteer een leveranciersdeel voor dit voorraadartikel" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Waar bevindt zich dit voorraaditem?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Het verpakken van dit voorraaditem is opgeslagen in" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Geïnstalleerd in" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Is dit item geïnstalleerd in een ander item?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Serienummer van dit item" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Batch code voor dit voorraaditem" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Voorraad hoeveelheid" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Bron Bouw" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Build voor dit voorraaditem" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Verbruikt door" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Bestelling bouwen welke dit voorraadartikel heeft verbruikt" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Inkooporder Bron" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Bestemming Verkooporder" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Vervaldatum voor voorraadartikel. Voorraad zal worden beschouwd als verlopen na deze datum" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Verwijderen bij leegmaken" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Verwijder dit voorraadproduct wanneer de voorraad is leeg" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Enkele eenheidsprijs van de aankoop op het moment van aankoop" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Omgezet tot onderdeel" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "Hoeveelheid overschrijdt beschikbare voorraad" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Onderdeel is niet ingesteld als traceerbaar" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Hoeveelheid moet heel getal zijn" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Hoeveelheid mag niet hoger zijn dan de beschikbare voorraad ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Serienummers moeten als lijst worden opgegeven" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Hoeveelheid komt niet overeen met serienummers" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "Kan voorraad niet toewijzen aan structurele locatie" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Testsjabloon bestaat niet" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Voorraadartikel is toegewezen aan een verkooporder" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Voorraad item is geïnstalleerd in een ander item" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Voorraadartikel bevat andere producten" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Voorraadartikel is aan een klant toegewezen" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Voorraad item is momenteel in productie" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Geserialiseerde voorraad kan niet worden samengevoegd" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Dupliceer voorraadartikelen" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Voorraadartikelen moeten hetzelfde onderdeel verwijzen" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Voorraadartikelen moeten verwijzen naar dezelfde leveranciersdeel" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "De voorraad statuscodes moeten overeenkomen" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Voorraadartikel kan niet worden verplaatst omdat het niet op voorraad is" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Voorraad item volgen" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Item notities" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Resultaat voorraad test resultaten" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Waarde moet voor deze test worden opgegeven" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Bijlage moet worden geüpload voor deze test" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Ongeldige waarde voor deze test" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Test resultaat" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Test uitvoer waarde" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Test resultaat bijlage" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Test notities" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "Test station" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "De identificatie van het teststation waar de test werd uitgevoerd" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "Gestart" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Het tijdstip van de start test" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "Afgerond" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Het tijdstip van de afgeronde test" @@ -8793,246 +8858,246 @@ msgstr "Selecteer onderdeel voor het genereren van het serienummer voor" msgid "Quantity of serial numbers to generate" msgstr "Aantal serienummers om te genereren" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "Test template voor dit resultaat" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "Geen overeenkomende test gevonden voor dit onderdeel" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "SjabloonID of testnaam moet worden opgegeven" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "De testtijd kan niet eerder zijn dan de starttijd van de test" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Bovenliggend Item" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "Bovenliggende voorraad item" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Gebruik pakketgrootte bij het toevoegen: de hoeveelheid gedefinieerd is het aantal pakketten" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "Gebruik pakketgrootte" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Voer serienummers voor nieuwe items in" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Leverancier artikelnummer" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Verlopen" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Onderliggende items" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "Items volgen" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Inkoopprijs van dit voorraadartikel, per eenheid of pakket" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Aantal voorraaditems om serienummers voor te maken" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "Geen voorraad item opgegeven" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Hoeveelheid mag niet hoger zijn dan de beschikbare voorraad ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Locatie van bestemming" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Serienummers kunnen niet worden toegewezen aan dit deel" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Serienummers bestaan al" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Selecteer voorraaditem om te installeren" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Te installeren hoeveelheid" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Voer de te installeren hoeveelheid items in" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Transactienotitie toevoegen (optioneel)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "Te installeren hoeveelheid moet minimaal 1 zijn" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Voorraadartikel is niet beschikbaar" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "Het geselecteerde deel zit niet in de materialen lijst" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "De te installeren hoeveelheid mag niet groter zijn dan de beschikbare hoeveelheid" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Bestemmingslocatie voor verwijderd item" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Selecteer onderdeel om voorraaditem om te zetten in" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "Het geselecteerde deel is geen geldige optie voor de omzetting" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Kan voorraadartikel niet converteren met toegewezen leverancier deel" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Voorraad status code" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Selecteer voorraadartikelen om status te wijzigen" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Geen voorraaditems geselecteerd" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Sublocaties" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "Bovenliggende voorraad locatie" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Onderdeel moet verkoopbaar zijn" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "Artikel is toegewezen aan een verkooporder" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "Artikel is toegewezen aan een productieorder" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Klant om voorraadartikelen toe te wijzen" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "Geselecteerde bedrijf is geen klant" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Voorraad toewijzing notities" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Een lijst met voorraad artikelen moet worden opgegeven" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Voorraad samenvoegen notities" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Niet overeen komende leveranciers toestaan" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Toestaan dat voorraadartikelen met verschillende leveranciers onderdelen worden samengevoegd" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Sta onjuiste status toe" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Toestaan dat voorraadartikelen met verschillende statuscodes worden samengevoegd" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Er moeten ten minste twee voorraadartikelen worden opgegeven" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Geen wijziging" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Voorraaditem primaire sleutel waarde" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "Voorraad artikel is niet op voorraad" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "Voorraad artikel is al in voorraad" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "Hoeveelheid mag niet negatief zijn" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Voorraad transactie notities" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "Samenvoegen in bestaande voorraad" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "Voeg indien mogelijk geretourneerde items samen in bestaande voorraad" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "Volgend serienummer" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "Vorig serienummer" @@ -9538,59 +9603,75 @@ msgstr "Achternaam van de gebruiker" msgid "Email address of the user" msgstr "E-mailadres van de gebruiker" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Medewerkers" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Heeft deze gebruiker medewerker machtigingen" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Administrator " -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Is deze gebruiker een administrator " -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Is dit gebruikersaccount actief" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "Enkel een supergebruiker kan dit veld aanpassen" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "Wachtwoord" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "Wachtwoord voor de gebruiker" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "Overschrijf waarschuwing" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "Overschrijf de waarschuwing over wachtwoord regels" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "U hebt geen toestemming om gebruikers aan te maken" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Je account is aangemaakt." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Gebruik de wachtwoordreset functie om in te loggen" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Welkom bij InvenTree" diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po index 923e8fadf8..0c645e9438 100644 --- a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 20:21\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API-endepunkt ikke funnet" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Brukeren har ikke rettigheter til å se denne modellen" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Kunne ikke konvertere {original} til {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" @@ -112,13 +104,13 @@ msgstr "Oppgi dato" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Notater" @@ -131,75 +123,91 @@ msgstr "Verdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Angitt verdi samsvarer ikke med påkrevd mønster: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Tom serienummerstreng" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Duplisert serienummer" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Gruppesekvens {group} overskrider tillatt antall ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Ingen serienummer funnet" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-tagger fra denne verdien" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Tilkoblingsfeil" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serveren svarte med ugyldig statuskode" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Det har oppstått et unntak" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarte med ugyldig \"Content-Length\"-verdi" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Bildestørrelsen er for stor" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Bildenedlasting overskred maksimal størrelse" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Ekstern server returnerte tomt svar" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Angitt URL er ikke en gyldig bildefil" @@ -207,11 +215,11 @@ msgstr "Angitt URL er ikke en gyldig bildefil" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-post" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "Referansenummeret er for stort" msgid "Invalid choice" msgstr "Ugyldig valg" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Beskrivelse" msgid "Description (optional)" msgstr "Beskrivelse (valgfritt)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Sti" @@ -313,75 +321,66 @@ msgstr "Unik hash av strekkodedata" msgid "Existing barcode found" msgstr "Eksisterende strekkode funnet" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverfeil" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "En feil har blitt logget av serveren." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Bilde" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Må være et gyldig tall" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Velg valuta ut fra tilgjengelige alternativer" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Ugyldig verdi" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Eksternt bilde" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URLtil ekstern bildefil" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Nedlasting av bilder fra ekstern URL er ikke aktivert" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Kinesisk (forenklet)" msgid "Chinese (Traditional)" msgstr "Kinesisk (tradisjonell)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "Ugyldig fysisk enhet" msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Ordrestatus" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Overordnet produksjon" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategori" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Produksjonen må avbrytes før den kan slettes" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Forbruksvare" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Valgfritt" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Sammenstilling" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Spores" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Tildelt" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tilgjengelig" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "I bestilling" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Produksjonsordre" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Plassering" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Produksjonsordrer" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Sammenstillings-BOMen er ikke godkjent" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Produksjonsordre kan ikke opprettes for en inaktiv del" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Produksjonsordre kan ikke opprettes for en ulåst del" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Ansvarlig bruker eller gruppe må spesifiseres" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Produksjonsordrens del kan ikke endres" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Produksjonsordre-referanse" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Produksjonsordre-referanse" msgid "Reference" msgstr "Referanse" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Kort beskrivelse av produksjonen (valgfritt)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Velg del å produsere" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Salgsordrereferanse" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Kildeplassering" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Velg plassering å ta lagerbeholdning fra for denne produksjonen (la stå tomt for a ta fra alle lagerplasseringer)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Fullført plassering" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Velg plassering der fullførte artikler vil bli lagret" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Produksjonsmengde" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Antall lagervarer å produsere" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Fullførte artikler" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Antall lagervarer som er fullført" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Produksjonsstatus" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Produksjonsstatuskode" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Batchkode" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Batchkode for denne produksjonsartikkelen" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Opprettelsesdato" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Forventet sluttdato" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldato for ferdigstillelse. Produksjonen vil være forfalt etter denne datoen." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Fullført dato" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "fullført av" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Utstedt av" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Brukeren som utstedte denne produksjonsordren" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Bruker eller gruppe ansvarlig for produksjonsordren" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Ekstern lenke" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Lenke til ekstern URL" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Produksjonsprioritet" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Produksjonsordrens prioritet" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Prosjektkode" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Prosjektkode for denne produksjonsordren" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Kunne ikke delegere bort oppgaven for å fullføre tildelinger" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Produksjonsordre {build} er fullført" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "En produksjonsordre er fullført" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienumre må angis for sporbare deler" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Ingen produksjonsartikkel spesifisert" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Produksjonsartikkelen er allerede fullført" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Kvantitet kan ikke være større enn utgangsantallet" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Produksjonsartikkel {serial} har ikke bestått alle påkrevde tester" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Produksjonsartikkel" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Produksjonsobjekt" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Produksjonsobjekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Antall" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Påkrevd antall for produksjonsordre" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Produksjonselement må spesifisere en produksjonsartikkel, da master-del er merket som sporbar" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Valgt lagervare samsvarer ikke med BOM-linjen" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Mengden må være 1 for serialisert lagervare" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tildelt antall ({q}) kan ikke overstige tilgjengelig lagerbeholdning ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Lagervaren er overtildelt" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Lagervare" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Kildelagervare" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Lagerantall å tildele til produksjonen" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Monteres i" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Lagervare for montering" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Delnavn" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Produksjonsartikkel" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Produksjonsartikkel samsvarer ikke med overordnet produksjon" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Resultatdel samsvarer ikke med produksjonsordredel" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Denne produksjonsartikkelen er allerede fullført" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Denne produksjonsartikkelen er ikke fullt tildelt" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Angi antall for produksjonsartikkel" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Heltallsverdi kreves for sporbare deler" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Heltallsverdi kreves, da stykklisten inneholder sporbare deler" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Angi serienummer for produksjonsartikler" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Lagerplassering for produksjonsartikkel" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk tildeling av serienummer" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienummer finnes allerede eller er ugyldige" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "En liste over produksjonsartikler må oppgis" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Lagerplassering for skrotede produksjonsartikler" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Forkast tildelinger" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Forkast tildelinger fra skrotede produksjonsartikler" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Grunn for skroting av produksjonsartikler" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Plassering for ferdige produksjonsartikler" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Godta ufullstendig tildeling" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Fullfør artikler dersom lagerbeholdning ikke er fullt tildelt" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Bruk tildelt lagerbeholdning" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Bruk all lagerbeholdning som allerede er tildelt denne produksjonen" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Fjern ufullstendige artikler" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Slett alle produksjonsartikler som ikke er fullført" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Ikke tillatt" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Godta som brukt av denne produksjonsordren" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Fjern tildeling før produksjonsordren fullføres" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Overtildelt lagerbeholdning" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Hvordan vil du håndtere ekstra lagervarer tildelt produksjonsordren" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Noen lagervarer har blitt overtildelt" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Godta ikke tildelt" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Godta at lagervarer ikke er fullt tildelt til denne produksjonsordren" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Nøvendig lagerbeholdning er ikke fullt tildelt" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Godta uferdig" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Godta at nødvendig antall fullførte produksjonsartikler ikke er nådd" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Nødvendig produksjonsmengde er ikke nådd" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Produksjonsordren har uferdige artikler" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Produksjonslinje" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Produksjonsartikkel" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Produksjonsartikkel må peke til samme produksjon" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Produksjonsartikkel" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part må peke på den samme delen som produksjonsordren" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Artikkelen må være på lager" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig antall ({q}) overskredet" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Produksjonsartikkel må spesifiseres for tildeling av sporede deler" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Produksjonsartikkel kan ikke spesifiseres for tildeling av usporede deler" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Tildelingsartikler må oppgis" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lagerplassering hvor deler skal hentes (la stå tomt for å ta fra alle plasseringer)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Eksluderer plassering" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Ekskluder lagervarer fra denne valgte plasseringen" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Utskiftbar lagerbeholdning" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagervarer ved flere plasseringer kan brukes om hverandre" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Erstatning-lagerbeholdning" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Tilatt tildelling av erstatningsdeler" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Valgfrie artikler" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Tildel valgfrie BOM-artikler til produksjonsordre" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Kunne ikke starte auto-tideling" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "BOM-referanse" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Leverandørdel" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Tildelt antall" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Produksjonsreferanse" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Delkategorinavn" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Sporbar" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Nedarvet" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Tillat Varianter" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOM-artikkel" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "I produksjon" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Ekstern lagerbeholdning" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Tilgjengelige erstatningsvarer" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Tilgjengelige variantvarer" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "Kansellert" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Fullført" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Lagerbeholdning kreves for produksjonsordre" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Forfalt produksjonsordre" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Produksjonsordre {bo} er nå forfalt" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "Er lenke" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "Er fil" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Brukeren har ikke tillatelse til å slette dette vedlegget" @@ -1555,794 +1554,794 @@ msgstr "Ingen programtillegg" msgid "Project Code Label" msgstr "Etikett for prosjektkode" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Oppdatert" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Tidsstempel for forrige oppdatering" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Unik prosjektkode" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Prosjektbeskrivelse" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Bruker eller gruppe ansvarlig for dette prosjektet" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Innstillings verdi" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Valgt verdi er ikke et gyldig alternativ" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Verdien må være en boolsk verdi" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Verdien må være et heltall" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Nøkkelstreng må være unik" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Bruker" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Antall for prisbrudd" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Pris" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Enhetspris på spesifisert antall" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Endepunkt" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Endepunktet hvor denne webhooken er mottatt" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Navn for webhooken" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktiv" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Er webhooken aktiv" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Sjetong" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Nøkkel for tilgang" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Hemmelig" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Delt hemmlighet for HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "Melding ID" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Unik Id for denne meldingen" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Vert" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Verten denne meldingen ble mottatt fra" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Tittel" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Overskrift for denne meldingen" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Brødtekst" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Innholdet i meldingen" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Endepunktet meldingen ble mottatt fra" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Arbeidet med" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Var arbeidet med denne meldingen ferdig?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Tittel" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Lenke" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Publisert" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Forfatter" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Sammendrag" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Les" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Er dette nyhetselementet lest?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Bildefil" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Enhetssymbolet må være unikt" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Enhetsnavn må være en gyldig identifikator" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Enhetsnavn" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Valgfritt enhetssymbol" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definisjon" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Enhetsdefinisjon" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Vedlegg" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Fil mangler" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Mangler eksternlenke" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Velg fil å legge ved" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Vedleggskommentar" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Opplastet dato" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Datoen som filen ble lastet opp" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Filstørrelse" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Filstørrelse i byte" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Ugyldig modelltype spesifisert for vedlegg" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Verdi" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Opprettet" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Sist oppdatert" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Parametermal" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Sjekkboksparameter kan ikke ha enheter" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Sjekkboksparameter kan ikke ha valg" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Valg må være unike" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Navn på parametermal må være unikt" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Parameternavn" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Enheter" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Fysisk enheter for denne parameteren" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Parameterbeskrivelse" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Sjekkboks" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Er dette parameteret en sjekkboks?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Valg" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gyldige valg for denne parameteren (kommaseparert)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Aktivert" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Ugyldig valg for parameterverdi" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Mal" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Parameterverdi" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Notat" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Valgfritt notatfelt" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultat" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Nøkkel" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} kansellert" msgid "A order that is assigned to you was canceled" msgstr "En ordre som er tildelt til deg ble kansellert" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Artikler mottatt" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Kjører" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Ventende oppgaver" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Planlagte oppgaver" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Mislykkede oppgaver" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "Oppgave-ID" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Unik oppgave-ID" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Lås" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Låsetidspunkt" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Oppgavenavn" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Funksjon" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Funksjonsnavn" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumenter" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Oppgaveargumenter" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Nøkkelordargumenter" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Nøkkelordargumenter for oppgave" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Filnavn" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Modelltype" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Brukeren har ikke tillatelse tillatelse å opprette eller endre vedlegg for denne modellen" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Ingen gruppe" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Nettstedets URL er låst av konfigurasjon" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Omstart kreves" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "En innstilling har blitt endret som krever en omstart av serveren" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Ventende migrasjoner" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Antall ventende databasemigreringer" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Navn på serverinstans" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Strengbeskrivelse for serverinstansen" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Bruk instansnavn" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Bruk instansnavnet på tittellinjen" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Begrens visning av 'om'" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Vis `about`-modal kun til superbrukere" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Firmanavn" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Internt firmanavn" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Base-URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Base-URL for serverinstans" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Standardvaluta" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Velg grunnvalutaen for prisberegninger" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Støttede valutaer" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Liste over støttede valutakoder" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Oppdateringsintervall for valuta" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Hvor ofte valutakurser skal oppdateres (sett til null for å deaktiverere)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "dager" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Valutaoppdaterings-plugin" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Valgt valutaoppdaterings-plugin" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Last ned fra URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Tillat nedlastning av eksterne bilder og filer fra ekstern URL" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Nedlastingsgrense" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Maksimal tillatt nedlastingsstørrelse for eksternt bilde" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "User-Agent brukt for å laste ned fra URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Tillat overstyring av User-Agent brukt for å laste ned bilder og filer fra eksterne URLer (lå stå blank for standard)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Streng URL-validering" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Krev skjemaspesifikasjon ved validering av URLer" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Intervall for oppdateringssjekk" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Tidsintervall for å se etter oppdateringer(sett til null for å skru av)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Automatisk sikkerhetskopiering" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Aktiver automatisk sikkerhetskopiering av database og mediafiler" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Automatisk sikkerhetskopieringsintervall" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Angi antall dager mellom automatiske sikkerhetskopieringshendelser" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Slettingsintervall for oppgaver" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Bakgrunnsoppgaveresultater vil bli slettet etter antall angitte dager" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Slettingsintervall for feillogg" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Feilloggene vil bli slettet etter et angitt antall dager" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Slettingsintervall for varsler" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Brukervarsler slettes etter angitt antall dager" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Strekkodestøtte" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Aktiver støtte for strekkodeleser i webgrensesnittet" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Innlesingsforsinkelse for strekkode" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Tidsforsinkelse for behandling av strekkode" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Støtte for strekkodewebkamera" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Tillat strekkodelesning via webkamera i nettleseren" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Vis Strekkodedata" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Vis strekkodedata som tekst" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Delrevisjoner" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Aktiver revisjonsfeltet for Del" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "IPN regex" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulært uttrykksmønster for matching av internt delnummer" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Tilat duplikat av internt delnummer" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Tillat flere deler å dele samme interne delnummer" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Tillat redigering av internt delnummer" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Tillat endring av IPN-verdien mens du redigerer en del" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Kopier BOM-data fra del" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopier BOM-data som standard når du dupliserer en del" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Kopier parameterdata fra del" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopier parameterdata som standard ved duplisering av en del" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Kopier testdata fra del" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Kopier testdata som standard ved duplisering av en del" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Kopier designmaler for kategoriparametere" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Kopier parametermaler for kategori ved oppretting av en del" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Deler er maler som standard" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Deler kan settes sammen fra andre komponenter som standard" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Deler kan bli brukt som underkomponenter som standard" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Kjøpbar" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Deler er kjøpbare som standard" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Salgbar" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Deler er salgbare som standard" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Deler er sporbare som standard" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtuelle" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Deler er virtuelle som standard" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Vis relaterte deler" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Vis relaterte deler i en del" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Innledende lagerbeholdningsdata" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Tillat oppretting av innledende lagerbeholdning når en ny del opprettes" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Innledende leverandørdata" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Tillat oppretting av innledende leverandørdata når en ny del opprettes" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Visningsformat for delnavn" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Format for å vise delnavnet" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Standardikon for delkategorier" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Standardikon for delkategorier (tomt betyr ingen ikon)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Minimum antall desimalplasser for priser" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimum antall desimalplasser som skal vises når man gjengir prisdata" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Maksimalt antall desimalplasser for priser" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maksimalt antall desimalplasser som skal vises når man gjengir prisdata" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Bruk leverandørpriser" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inkluder leverandørprisbrudd i beregninger av totalpriser" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Innkjøpshistorikkoverstyring" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historiske innkjøpspriser overstyrer leverandørprisnivåer" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Bruk lagervarepriser" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Bruk priser fra manuelt innlagte lagervarer for prisberegninger" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Lagervare prisalder" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Unnta lagervarer som er eldre enn dette antall dager fra prisberegninger" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Bruk Variantpriser" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Inkluder variantpriser i beregninger av totale priser" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Kun aktive varianter" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Bruk kun aktive variantdeler til beregning av variantprising" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Intervall for rekalkulering av priser" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Antall dager før delpriser blir automatisk oppdatert" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Interne Priser" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Aktiver interne priser for deler" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Intern prisoverstyring" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Hvis tilgjengelig, overstyrer interne priser kalkulering av prisområde" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Aktiver etikettutskrift" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Aktiver utskrift av etiketter fra nettleseren" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "Etikettbilde-DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI-oppløsning når når det genereres bildefiler for sending til utvidelser for etikettutskrift" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Aktiver Rapporter" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Aktiver generering av rapporter" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Feilsøkingsmodus" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Generer rapporter i feilsøkingsmodus (HTML-output)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Sidestørrelse" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Standard sidestørrelse for PDF-rapporter" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Tving parameterenheter" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Hvis det er angitt en enhet, skal parameterverdiene samsvare med de angitte enhetene" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Globalt Unike Serienummer" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummer for lagervarer må være globalt unike" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Slett oppbrukt lagerbeholdning" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Batchkodemal" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Mal for generering av standard batchkoder for lagervarer" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Lagerbeholdning utløper" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Aktiver funksjonalitet for utløp av lagerbeholdning" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Selg utløpt lagerbeholdning" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Tillat salg av utgått lagerbeholdning" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Foreldet lagerbeholdning tidsintervall" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Antall dager før lagervarer er ansett som foreldet før utløp" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Produsér Utløpt Lagerbeholdning" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Tillat produksjon med utløpt lagerbeholdning" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Kontroll over eierskap av lagerbeholdning" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Aktiver eierskap over lagerplasseringer og -varer" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Lagerplassering standard ikon" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Lagerplassering standard ikon (tomt betyr ingen ikon)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Vis installerte lagervarer" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Vis installerte lagervarer i lagertabeller" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Produksjonsordre-referansemønster" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Nødvendig mønster for å generere Produksjonsordre-referansefeltet" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Aktiver returordrer" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Aktiver returordrefunksjonalitet i brukergrensesnittet" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Returordre-referansemønster" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Rediger fullførte returordrer" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Tillat redigering av returordrer etter de er fullført" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Salgsordre-referansemønster" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Påkrevd mønster for å generere salgsordrereferansefelt" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Salgsordre standard fraktmetode" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Aktiver opprettelse av standard forsendelse med salgsordrer" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Rediger fullførte salgsordrer" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Tillat redigering av salgsordrer etter de har blitt sendt eller fullført" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Referansemønster for innkjøpsordre" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Obligatorisk mønster for generering av referansefelt for innkjøpsordre" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Rediger fullførte innkjøpsordre" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Tillat redigering av innkjøpsordre etter at de har blitt sendt eller fullført" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Autofullfør innkjøpsordrer" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatisk merk innkjøpsordre som fullført når alle ordrelinjer er mottatt" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Aktiver passord glemt" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Ativer funskjon for glemt passord på innloggingssidene" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Aktiver registrering" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Aktiver egenregistrerting for brukerer på påloggingssidene" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Aktiver SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Aktiver SSO på innloggingssidene" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Aktiver SSO-registrering" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Aktiver selvregistrering via SSO for brukere på innloggingssiden" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "E-postadresse kreves" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Krevt at brukere angir e-post ved registrering" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Auto-utfyll SSO-brukere" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Fyll automatisk ut brukeropplysninger fra SSO-kontodata" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "E-post to ganger" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Spør brukeren om e-post to ganger ved registrering" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Passord to ganger" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Spør brukeren om passord to ganger ved registrering" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Tillatte domener" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Begrens registrering til bestemte domener (kommaseparert, begynner med @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Gruppe ved registrering" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Krev MFA" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Brukere må bruke flerfaktorsikkerhet." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Sjekk utvidelser ved oppstart" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Sjekk at alle utvidelser er installert ved oppstart - aktiver i containermiljøer" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Aktiver URL-integrasjon" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Tillat utvidelser å legge til URL-ruter" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Aktiver navigasjonsintegrasjon" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Tillat utvidelser å integrere mot navigasjon" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Aktiver app-integrasjon" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Tillat utvidelser å legge til apper" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Aktiver tidsplanintegrasjon" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Tillat utvidelser å kjøre planlagte oppgaver" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Aktiver hendelsesintegrasjon" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Tillat utvidelser å reagere på interne hendelser" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Ekskluder eksterne plasseringer" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Automatisk varetellingsperiode" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Vis brukernes fulle navn" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Vis brukernes fulle navn istedet for brukernavn" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "Delen er aktiv" msgid "Manufacturer is Active" msgstr "Leverandør er aktiv" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "Leverandørdel er aktiv" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "Intern del er aktiv" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "Leverandør er aktiv" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Produsent" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Firmaer" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Beskrivelse av firma" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Beskrivelse av firmaet" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Nettside" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Bedriftens nettside URL" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Telefonnummer" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kontakt-telefonnummer" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontakt e-post" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Kontaktpunkt" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link til ekstern bedriftsinformasjon" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Er firmaet aktivt?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Er kunde" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Selger du varer til dette firmaet?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Er leverandør" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Kjøper du varer fra dette firmaet?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Er produsent" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Produserer dette firmaet deler?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Standardvaluta brukt for dette firmaet" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Adresse" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Adresser" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Velg selskap" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Adressetittel" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Tittel som beskriver addressen" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Hovedadresse" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Sett som hovedadresse" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Linje 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Adresselinje 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Linje 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Adresselinje 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Postnummer" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Poststed/område" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Postnummerets by/område" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Delstat/provins" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Delstat eller provins" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Land" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Adressens land" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notater til transportør" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notater for transportør" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Interne fraktnotater" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Fraktnotater for internt bruk" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Lenke til adresseinformasjon (ekstern)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Produsentdeler" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Basisdel" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Velg del" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Velg produsent" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Produsentens varenummer" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL for ekstern produsentdel-lenke" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Produsentens delbeskrivelse" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Pakkeenhetene må være komptible med delens basisenhet" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Pakkeenhet må være mer enn null" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Leverandør" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Velg leverandør" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Leverandørens lagerbeholdningsenhet" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Er denne leverandørdelen aktiv?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Velg produsentdel" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL for ekstern leverandørdel-lenke" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Leverandørens delbeskrivelse" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "grunnkostnad" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Emballasje" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Delemballasje" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Pakkeantall" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Totalt antall i en enkelt pakke. La være tom for enkeltenheter." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "flere" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Bestill flere" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Antall tilgjengelig fra leverandør" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Tilgjengelighet oppdatert" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Dato for siste oppdatering av tilgjengelighetsdata" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Leverandørens prisbrudd" @@ -4316,7 +4323,7 @@ msgstr "Standardvaluta brukt for denne leverandøren" msgid "Company Name" msgstr "Bedriftsnavn" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "På lager" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Gyldig" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Ukjent" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Ordrereferanse" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Opprettet av" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Ordre" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Intern del" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Fullført" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Innkjøpsordre" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Innkjøpsordre" msgid "Sales Order" msgstr "Salgsordre" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Total pris" msgid "Total price for this order" msgstr "Total pris for denne ordren" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Ordrevaluta" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta for denne ordren (la stå tom for å bruke firmastandard)" @@ -4851,718 +4870,742 @@ msgstr "Valuta for denne ordren (la stå tom for å bruke firmastandard)" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Kontakten samsvarer ikke med valgt firma" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Ordrebeskrivelse (valgfritt)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Velg prosjektkode for denne ordren" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Lenke til ekstern side" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldato" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Forventet dato for levering av ordre. Bestillingen vil være forfalt etter denne datoen." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Sendt dato" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Dato bestillingen ble sendt" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Bruker eller gruppe ansvarlig for ordren" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Kontaktpunkt for denne ordren" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Selskapsadresse for denne ordren" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Ordrereferanse" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Status for innkjøpsordre" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Firma som varene blir bestilt fra" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Leverandørreferanse" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Leverandørens ordrereferanse" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "mottatt av" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Dato ordre ble fullført" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Destinasjon" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Delleverandør må matche PO-leverandør" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Linjeelementet samsvarer ikke med innkjøpsordre" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Mengde må være positiv" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kunde" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Firma som varene selges til" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Kundereferanse " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Kundens ordrereferanse" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Forsendelsesdato" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "sendt av" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Kun en åpen ordre kan merkes som fullført" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Bestillingen kan ikke fullføres da det finnes ufullstendige forsendelser" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "Denne ordren kan ikke fullføres da det fortsatt er ufullstendige artikler" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Antall" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Linjereferanse" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Linjenotater" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Måldato for denne linjen (la stå tomt for å bruke måldatoen fra ordren)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Linjeelementbeskrivelse (valgfritt)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Ytterligere kontekst for denne linjen" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Enhetspris" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "Delens leverandør må samsvare med leverandør" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Leverandørdel" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Mottatt" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Antall enheter mottatt" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Innkjøpspris" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Enhet-innkjøpspris" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Kun salgbare deler kan tildeles en salgsordre" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Salgspris" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Enhets-salgspris" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Sendt" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Sendt antall" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Dato for forsendelse" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Leveringsdato" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Dato for levering av forsendelse" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Sjekket Av" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Brukeren som sjekket forsendelsen" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Forsendelse" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Forsendelsesnummer" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Sporingsnummer" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Sporingsinformasjon for forsendelse" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Referansenummer for tilknyttet faktura" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Forsendelsen er allerede sendt" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Forsendelsen har ingen tildelte lagervarer" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "Lagervarer er ikke blitt tildelt" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Kan ikke tildele lagervare til en linje med annen del" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Kan ikke tildele lagerbeholdning til en linje uten en del" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tildelingsantall kan ikke overstige tilgjengelig lagerbeholdning" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Tildelingsantall må være større enn null" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "Antall må være 1 for serialisert lagervare" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Salgsordre samsvarer ikke med forsendelse" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Forsendelsen samsvarer ikke med salgsordre" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Linje" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Forsendelsesreferanse for salgsordre" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Artikkel" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Velg lagervare å tildele" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Angi lagertildelingsmengde" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Returordre-referanse" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Firmaet delen skal returneres fra" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Returordrestatus" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Velg artikkel som skal returneres fra kunde" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Mottatt Dato" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Utfall" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Utfall for dette linjeelementet" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Kostnad forbundet med retur eller reparasjon for dette linjeelementet" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopier parametere" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Linjeelementer" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Leverandørnavn" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Ordren kan ikke kanselleres" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Tillat ordre å lukkes med ufullstendige linjeelementer" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "Ordren har ufullstendige linjeelementer" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "Ordren er ikke åpen" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Innkjøpsvaluta" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "SKU-kode" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Internt delnummer" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Leverandørdel må angis" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Innkjøpsordre må angis" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Leverandør må samsvare med innkjøpsordre" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Innkjøpsordre må samsvare med leverandør" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Ordrelinje" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Velg lagerplassering for mottatte enheter" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Angi batchkode for innkommende lagervarer" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Utløpsdato" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Angi serienummer for innkommende lagervarer" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Strekkode" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Skannet strekkode" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Strekkode allerede i bruk" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Linjeelementer må være oppgitt" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Målplassering må angis" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Angitte strekkodeverdier må være unike" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Fullførte forsendelser" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Valuta for salgspris" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Ingen forsendelsesopplysninger oppgitt" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Linjeelement er ikke knyttet til denne ordren" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Mengden må være positiv" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Skriv inn serienummer for å tildele" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "Forsendelsen er allerede sendt" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "Forsendelsen er ikke knyttet til denne ordren" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Ingen treff funnet for følgende serienummer" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Returordrelinje" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Linjeelementet samsvarer ikke med returordre" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Linjeelementet er allerede mottatt" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Artikler kan bare mottas mot ordrer som pågår" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Valuta for linje" @@ -5598,146 +5641,146 @@ msgstr "Refusjon" msgid "Reject" msgstr "Avvis" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Forfalt Innkjøpsordre" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Innkjøpsordre {po} er nå forfalt" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Forfalt Salgsordre" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Salgsordre {so} er nå forfalt" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "Delkategori" msgid "Part Categories" msgstr "Delkategorier" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Standard plassering" @@ -5778,7 +5821,7 @@ msgstr "Standard nøkkelord for deler i denne kategorien" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (valgfritt)" @@ -5799,7 +5842,7 @@ msgstr "Standardverdi" msgid "Default Parameter Value" msgstr "Standard Parameterverdi" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Deler" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Lagervare med dette serienummeret eksisterer allerede" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplikat av internt delnummer er ikke tillatt i delinnstillinger" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Del med dette Navnet, internt delnummer og Revisjon eksisterer allerede." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Deler kan ikke tilordnes strukturelle delkategorier!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Delnavn" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Er Mal" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Er delen en maldel?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Er delen en variant av en annen del?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Variant av" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Delbeskrivelse (valgfritt)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Nøkkelord" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Del-nøkkelord for å øke synligheten i søkeresultater" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Delkategori" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Delrevisjon eller versjonsnummer" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Revisjon" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Hvor er denne artikkelen vanligvis lagret?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Standard utløp" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Utløpstid (i dager) for lagervarer av denne delen" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimal lagerbeholdning" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Minimum tillatt lagernivå" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Måleenheter for denne delen" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Kan denne delen bygges fra andre deler?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Kan denne delen brukes til å bygge andre deler?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Har denne delen sporing av unike artikler?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Kan denne delen kjøpes inn fra eksterne leverandører?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Kan denne delen selges til kunder?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Er denne delen aktiv?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "Er dette en virtuell del, som et softwareprodukt eller en lisens?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Kontrollsum for BOM" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Lagret BOM-kontrollsum" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "Stykkliste sjekket av" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Stykkliste sjekket dato" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Opprettingsbruker" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Eier ansvarlig for denne delen" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Selg flere" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Valuta som brukes til å bufre prisberegninger" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Minimal BOM-kostnad" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Minste kostnad for komponentdeler" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Maksimal BOM-kostnad" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Maksimal kostnad for komponentdeler" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Minimal innkjøpskostnad" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Minimal historisk innkjøpskostnad" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Maksimal innkjøpskostnad" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Maksimal historisk innkjøpskostnad" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Minimal intern pris" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Minimal kostnad basert på interne prisbrudd" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Maksimal intern pris" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Maksimal kostnad basert på interne prisbrudd" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Minimal leverandørpris" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Minimumspris for del fra eksterne leverandører" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Maksimal leverandørpris" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Maksimalpris for del fra eksterne leverandører" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Minimal Variantkostnad" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Beregnet minimal kostnad for variantdeler" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Maksimal Variantkostnad" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Beregnet maksimal kostnad for variantdeler" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Minimal kostnad" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Overstyr minstekostnad" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Maksimal kostnad" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Overstyr maksimal kostnad" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Beregnet samlet minimal kostnad" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Beregnet samlet maksimal kostnad" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Minimal salgspris" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Minimal salgspris basert på prisbrudd" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Maksimal Salgspris" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Maksimal salgspris basert på prisbrudd" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Minimal Salgskostnad" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Minimal historisk salgspris" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Maksimal Salgskostnad" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Maksimal historisk salgspris" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Del for varetelling" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Antall" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Antall individuelle lagerenheter på tidspunkt for varetelling" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Total tilgjengelig lagerbeholdning på tidspunkt for varetelling" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Dato" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Dato for utført lagertelling" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Minimal lagerkostnad" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Estimert minimal kostnad for lagerbeholdning" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Maksimal lagerkostnad" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Estimert maksimal kostnad for lagerbeholdning" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Testnavn" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Angi et navn for testen" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Testbeskrivelse" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Legg inn beskrivelse for denne testen" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Påkrevd" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Er det påkrevd at denne testen bestås?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Krever verdi" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Krever denne testen en verdi når det legges til et testresultat?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Krever vedlegg" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Krever denne testen et filvedlegg når du legger inn et testresultat?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Velg overordnet del" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Underordnet del" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Velg del som skal brukes i BOM" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "BOM-antall for denne BOM-artikkelen" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Denne BOM-artikkelen er valgfri" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Denne BOM-artikkelen er forbruksvare (den spores ikke i produksjonsordrer)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "BOM-artikkelreferanse" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "BOM-artikkelnotater" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Kontrollsum" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "BOM-linje kontrollsum" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Godkjent" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Denne BOM-artikkelen er godkjent" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Arves" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Denne BOM-artikkelen er arvet fra stykkliste for variantdeler" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Lagervarer for variantdeler kan brukes for denne BOM-artikkelen" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Antall må være heltallsverdi for sporbare deler" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Underordnet del må angis" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "BOM-artikkel erstatning" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "Erstatningsdel kan ikke være samme som hoveddelen" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Overordnet BOM-artikkel" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Erstatningsdel" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Velg relatert del" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Del-forhold kan ikke opprettes mellom en del og seg selv" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Duplikatforhold eksisterer allerede" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Innkjøpsvaluta for lagervaren" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Original Del" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Velg original del å duplisere" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopier Bilde" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Kopier bilde fra originaldel" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Kopier Stykkliste" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Kopier stykkliste fra original del" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Kopier parametere" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Kopier parameterdata fra originaldel" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Kopier notater" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Kopier notater fra originaldel" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Angi initiell lagermengde for denne delen. Hvis antall er null, er ingen lagerbeholdning lagt til." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Innledende lagerplassering" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Angi initiell lagerplasering for denne delen" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Velg leverandør (eller la stå tom for å hoppe over)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Velg produsent (eller la stå tom for å hoppe over)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Produsentens delenummer" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Valgt firma er ikke en gyldig leverandør" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Valgt firma er ikke en gyldig produsent" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Produsentdel som matcher dette MPN-et, finnes allerede" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategorinavn" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Produseres" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Lagervarer" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Total lagerbeholdning" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Dupliser del" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kopier innledende data fra en annen del" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Lag en del med innledende lagermengde" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Leverandøropplysninger" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Legg til innledende leverandørinformasjon for denne delen" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kopier kategoriparametre" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Kopier parametermaler fra valgt delkategori" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Eksisterende bilde" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Filnavn for et eksisterende del-bilde" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Bildefilen finnes ikke" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Godkjenn hele Stykklisten" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Kan Produsere" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minstepris" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Overstyr beregnet verdi for minimumspris" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Valuta for minstepris" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Makspris" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Overstyr beregnet verdi for maksimal pris" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Valuta for maksimal pris" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Oppdater" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Oppdater priser for denne delen" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Kan ikke konvertere fra gitte valutaer til {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Minsteprisen kan ikke være større enn maksimal pris" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Maksimal pris kan ikke være mindre enn minstepris" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Velg del å kopiere BOM fra" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Fjern eksisterende data" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Fjern eksisterende BOM-artikler før kopiering" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Inkluder arvede" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Inkluder BOM-artikler som er arvet fra maldeler" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Hopp over ugyldige rader" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Kopier erstatningsdeler" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Varsel om lav lagerbeholdning" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Tilgjengelig lagerbeholdning for {part.name} har falt under det konfigurerte minimumsnivået" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "Gir støtte for å skanne TME-strekkoder" msgid "The Supplier which acts as 'TME'" msgstr "Leverandøren som fungerer som \"TME\"" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Installasjon av utvidelse vellykket" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Installerte utvidelsen til {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "Utvidelse" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Ingen forfatter funnet" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Utvidensen '{p}' er ikke kompatibel med nåværende InvenTree-versjon {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Utvidelsen krever minst versjon {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Utvidelsen krever maks versjon {v}" @@ -7884,51 +7937,51 @@ msgstr "Installasjonen ble ikke bekreftet" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Full omlasting" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Utfør en full omlasting av utvidelsesregisteret" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Tvangsomlasting" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Tving en omlasting av utvidelsesregisteret, selv om det allerede er lastet" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Hent inn utvidelser" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Hent inn utvidelser og legg dem til i registeret" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Aktivér utvidelse" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Aktivér denne utvidelsen" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serienummer" @@ -8215,7 +8268,7 @@ msgstr "Testrapport for lagervare" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Installerte artikler" @@ -8248,184 +8301,196 @@ msgstr "Ingen resultat (obligatorisk)" msgid "No result" msgstr "Ingen resultat" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Asset-filen eksisterer ikke" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Bildefil ikke funnet" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "part_image-taggen krever en Part-instans" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image-taggen krever en Company-instans" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Statuskode" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Ekstern plassering" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Del-tre" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Utløpsdato før" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Utløpsdato etter" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Foreldet" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Antall kreves" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Gyldig del må oppgis" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Oppgitt leverandørdel eksisterer ikke" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Leverandørdelen har en pakkestørrelse definert, men flagget \"use_pack_size\" er ikke satt" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serienumre kan ikke angis for en ikke-sporbar del" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "Lagerplasseringstyper" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Standard ikom for alle plasseringer som ikke har satt et ikon (valgfritt)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Lagerplassering" @@ -8449,11 +8514,11 @@ msgstr "Lagerplassering" msgid "Stock Locations" msgstr "Lagerplasseringer" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Eier" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Velg eier" @@ -8481,274 +8546,274 @@ msgstr "Lagerplasseringstype for denne plasseringen" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "De kan ikke gjøre denne plasseringen strukturell, da noen lagervarer allerede er plassert i den!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagervarer kan ikke plasseres i strukturelle plasseringer!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Lagervare kan ikke opprettes for virtuelle deler" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Deltype ('{self.supplier_part.part}') må være {self.part}" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Antall må være 1 for produkt med et serienummer" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Serienummeret kan ikke angis hvis antall er større enn 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Elementet kan ikke tilhøre seg selv" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Elementet må ha en produksjonsrefereanse om is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Produksjonsreferanse peker ikke til samme del-objekt" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Overordnet lagervare" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Basisdel" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Velg en tilsvarende leverandørdel for denne lagervaren" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Hvor er denne lagervaren plassert?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Inpakningen denne lagervaren er lagret i" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Installert i" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Er denne artikkelen montert i en annen artikkel?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Serienummer for denne artikkelen" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Batchkode for denne lagervaren" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Lagerantall" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Kildeproduksjon" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Produksjon for denne lagervaren" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Brukt av" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Produksjonsordren som brukte denne lagervaren" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Kildeinnkjøpsordre" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Innkjøpsordre for denne lagervaren" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Tildelt Salgsordre" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Utløpsdato for lagervare. Lagerbeholdning vil bli ansett som utløpt etter denne datoen" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Slett når oppbrukt" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Slett lagervaren når beholdningen er oppbrukt" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Innkjøpspris per enhet på kjøpstidspunktet" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Konvertert til del" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Delen er ikke angitt som sporbar" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Antall må være heltall" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Antallet stemmer ikke overens med serienumrene" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Lagervare har blitt tildelt en salgsordre" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Lagervare er montert i en annen artikkel" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Lagervare inneholder andre artikler" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Lagervare har blitt tildelt til en kunde" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Lagervare er for tiden i produksjon" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Serialisert lagerbeholdning kan ikke slås sammen" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Duplisert lagervare" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Lagervarer må referere til samme del" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Lagervarer må referere til samme leverandørdel" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Lagerstatuskoder må være like" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Lagervare kan ikke flyttes fordi den ikke er på lager" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Oppføringsnotater" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Verdi må angis for denne testen" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Vedlegg må lastes opp for denne testen" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Testresultat" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Testens verdi" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Vedlegg til testresultat" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Testnotater" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Overodnet element" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Bruk pakningsstørrelse når du legger til: antall definert er antall pakker" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Angi serienummer for nye artikler" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Leverandørens delnummer" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Utløpt" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Underordnede artikler" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Innkjøpspris for denne lagervaren, per enhet eller forpakning" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Angi antall lagervarer som skal serialiseres" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Til Lagerplassering" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Serienummer kan ikke tilordnes denne delen" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Seriernummer eksisterer allerede" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Velg lagervare å montere" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Antall å installere" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Angi antallet elementer som skal installeres" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Legg til transaksjonsnotat (valgfritt)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "Antall å installere må være minst 1" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Lagervaren er utilgjengelig" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "Valgt del er ikke i stykklisten" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "Antall å installere må ikke overskride tilgjengelig antall" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Lagerplassering for den avinstallerte artikkelen" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Velg del å konvertere lagervare til" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "Valgt del er ikke et gyldig alternativ for konvertering" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Kan ikke konvertere lagerprodukt med tildelt leverandørdel" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Lagervare statuskode" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Velg lagervarer for å endre status" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Ingen lagervarer valgt" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Underplasseringer" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Delen må være salgbar" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "Artikkelen er tildelt en salgsordre" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "Artikkelen er tildelt en produksjonsordre" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Kunde å tilordne lagervarer" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "Valgt firma er ikke en kunde" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Lagervare-tildelignsnotater" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "En liste av lagervarer må oppgis" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Notater om lagersammenslåing" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Tillat forskjellige leverandører" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Tillat lagervarer med forskjellige leverandørdeler å slås sammen" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Tillat forskjellig status" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Tillat lagervarer med forskjellige statuskoder å slås sammen" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Minst to lagervarer må oppgis" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Lagervare primærnøkkel verdi" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Lager transaksjonsnotater" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "Etternavn på brukeren" msgid "Email address of the user" msgstr "E-postadressen til brukeren" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personale" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Har denne brukeren personelltillatelser" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Superbruker" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Er denne brukeren en superbruker" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Er denne brukerkontoen aktiv" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Din konto er opprettet." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Vennligst bruk funksjonen for å tilbakestille passord for å logge inn" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Velkommen til InvenTree" diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po index be4f340d19..e8462dcbd3 100644 --- a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "Nie znaleziono punktu końcowego API" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Dla operacji masowych należy podać wykaz przedmiotów lub filtrów" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Elementy muszą być podane jako lista" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Podano nieprawidłową listę artykułów" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Filtry muszą być dostarczone jako kartka" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Podano niepoprawne filtry" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Wszystkie filtry muszą być używane tylko z true" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Żaden element nie spełnia podanych kryteriów" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Nie dostarczono danych" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Użytkownik nie ma uprawnień do przeglądania tego modelu" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nie udało się przeliczyć {original} na {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" @@ -112,13 +104,13 @@ msgstr "Wprowadź dane" msgid "Invalid decimal value" msgstr "Niepoprawna wartość dziesiętna" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Uwagi" @@ -131,75 +123,91 @@ msgstr "Wartość '{name}' nie pojawia się w formacie wzoru" msgid "Provided value does not match required pattern: " msgstr "Podana wartość nie pasuje do wymaganego wzoru: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Nie można serializować więcej niż 1000 przedmiotów naraz" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Pusty ciąg numeru seryjnego" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Podwójny numer seryjny" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Nieprawidłowa grupa: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Zakres grupy {group} przekracza dozwoloną ilość ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Nie znaleziono numerów seryjnych" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Liczba niepowtarzających się numerów seryjnych ({n}) musi odpowiadać ilości / liczbie ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Usuń znaczniki HTML z tej wartości" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Dane zawierają zabronione treści znacznika" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Błąd połączenia" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serwer odpowiedział z nieprawidłowym kodem statusu" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Wystąpił wyjątek" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serwer odpowiedział z nieprawidłową wartością Content-Length" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Rozmiar obrazu jest zbyt duży" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Przekroczono maksymalny rozmiar pobieranego obrazu" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Zdalny serwer zwrócił pustą odpowiedź" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Podany adres URL nie jest poprawnym plikiem obrazu" @@ -207,11 +215,11 @@ msgstr "Podany adres URL nie jest poprawnym plikiem obrazu" msgid "Log in to the app" msgstr "Logowanie do aplikacji" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Adres E-Mail" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Musisz włączyć uwierzytelnianie dwuskładnikowe przed wykonaniem czegokolwiek innego." @@ -259,18 +267,18 @@ msgstr "Numer odniesienia jest zbyt duży" msgid "Invalid choice" msgstr "Błędny wybór" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nazwa" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Opis" msgid "Description (optional)" msgstr "Opis (opcjonalny)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Ścieżka" @@ -313,75 +321,66 @@ msgstr "Unikalny hasz danych kodu kreskowego" msgid "Existing barcode found" msgstr "Znaleziono istniejący kod kreskowy" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Niepowodzenie zadania" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Zadanie pracownika w tle '{f}' nie powiodło się po próbach {n}" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Błąd serwera" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Błąd został zapisany w logach serwera." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Obraz" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Waluta" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Wybierz walutę z dostępnych opcji" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Nieprawidłowa wartość" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Obrazek zewnętrzny" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "Adres URL zdalnego pliku obrazu" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Pobieranie obrazów ze zdalnego URL nie jest włączone" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Nie udało się pobrać obrazu ze zdalnego adresu URL" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "chiński (uproszczony)" msgid "Chinese (Traditional)" msgstr "chiński (tradycyjny)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Dostępna aktualizacja" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "Dostępna jest aktualizacja dla InvenTree" @@ -553,30 +552,30 @@ msgstr "Niewłaściwa jednostka fizyczna" msgid "Not a valid currency code" msgstr "Nieprawidłowy kod waluty" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Status zamówienia" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Budowa nadrzędna" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Obejmuje warianty" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Obejmuje warianty" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Obejmuje warianty" msgid "Part" msgstr "Komponent" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategoria" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Budowa poprzednika" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Przypisane do mnie" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Stworzony przed" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Stworzony po" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Ma datę rozpoczęcia" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Data rozpoczęcia przed" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Data rozpoczęcia po" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Posiada docelową datę" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Data docelowa przed" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Docelowa data po" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Zakończone przed" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Zakończone po" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Minimalna data" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Maksymalna data" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Wyklucz drzewo" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Kompilacja musi zostać anulowana, zanim będzie mogła zostać usunięta" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Materiał eksploatacyjny" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Opcjonalne" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Złożenie" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Śledzony" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Testowalne" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Zaległe zamówienie" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Przydzielono" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostępne" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "W Zamówieniu" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Zlecenie Budowy" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokalizacja" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Wyjście" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Zlecenia budowy" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Zbiór BOM nie został zatwierdzony" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Zlecenie budowy nie może być utworzone dla nieaktywnej części" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Zlecenie budowy nie może zostać utworzone dla odblokowanej części" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Odpowiedzialny użytkownik lub grupa muszą być określone" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Nie można zmienić elementu kompletacji" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Data docelowa musi być po dacie rozpoczęcia" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Odwołanie do zamówienia wykonania" msgid "Reference" msgstr "Referencja" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Krótki opis produkcji (opcjonalny)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Wybierz część do budowy" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Odwołanie do zamówienia sprzedaży" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Lokalizacja źródła" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Wybierz lokalizację, z której pobrać element do budowy (pozostaw puste, aby wziąć z dowolnej lokalizacji)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Budowa zewnętrzna" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Lokalizacja docelowa" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Wybierz lokalizację, w której będą przechowywane ukończone elementy" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Ilość do stworzenia" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Ilość przedmiotów do zbudowania" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Ukończone elementy" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Ilość produktów magazynowych które zostały ukończone" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Status budowania" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Kod partii" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Data utworzenia" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Data rozpoczęcia budowy" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Zaplanowana data rozpoczęcia dla tego zamówienia budowy" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Docelowy termin zakończenia" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Docelowa data zakończenia kompilacji. Po tej dacie kompilacja będzie zaległa." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Data zakończenia" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "zrealizowane przez" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Wydany przez" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Użytkownik, który wydał to zamówienie" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odpowiedzialny" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Użytkownik lub grupa odpowiedzialna za te zlecenie produkcji" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Link Zewnętrzny" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link do zewnętrznego adresu URL" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Priorytet budowy" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Priorytet tego zamówienia produkcji" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Kod projektu" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Kod projektu dla tego zlecenia produkcji" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Nie udało się wyładować zadania, aby ukończyć alokację budowli" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Kolejność kompilacji {build} została zakończona" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Kolejność kompilacji została zakończona" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Należy podać numery seryjne dla lokalizowania części" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nie określono danych wyjściowych budowy" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Budowanie wyjścia jest już ukończone" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Ilość nie może być większa niż ilość wyjściowa" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Wyjście budowy {serial} nie przeszło wszystkich testów" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Zbuduj obiekt" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Zbuduj obiekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Ilość" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Wymagana ilość dla zlecenia produkcji" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Element kompilacji musi określać dane wyjściowe kompilacji, ponieważ część główna jest oznaczona jako możliwa do śledzenia" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Ilość musi wynosić 1 dla serializowanych zasobów" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Przydzielona ilość ({q}) nie może przekraczać dostępnej ilości zapasów magazynowych ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Pozycja magazynowa jest nadmiernie przydzielona" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Element magazynowy" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Ilość zapasów do przydzielenia do produkcji" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Zainstaluj do" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Poziom budowania" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nazwa komponentu" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Numer seryjny" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Automatycznie przydzielaj numery seryjne" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Odrzuć przydziały" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Zaakceptuj niekompletną alokację" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Usuń produkcje, które nie zostały zakończone" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Niedozwolone" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Zaakceptuj jako zużyte przez zlecenie produkcji" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Nadmierny przydział zasobów" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Zaakceptuj nieprzydzielone" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Zaakceptuj, że przedmioty magazynowe nie zostały w pełni przypisane do tego zlecenia budowy" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Wymagany stan nie został w pełni przypisany" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostępna ilość ({q}) przekroczona" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 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:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Wyklucz lokalizację" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Magazyn wymienny" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Towary magazynowe w wielu lokalizacjach mogą być stosowane zamiennie" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Zastępczy magazyn" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Przedmiot opcjonalny" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Przydziel opcjonalne elementy BOM do zbudowania zamówienia" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Odniesienie BOM" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID części BOM" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nazwa części BOM" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Wersja" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Część dostawcy" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Ilość zarezerwowana" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Możliwość śledzenia" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Zezwalaj na warianty" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "W produkcji" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Zew. zasoby magazynowe" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Dostępna ilość" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Dostępny magazyn zastępczy" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "Wstrzymane" msgid "Cancelled" msgstr "Anulowano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Zakończono" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "Jest plikiem" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "Brak wtyczki" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Zaktualizowany" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Data ostatniej aktualizacji" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "Zaktualizowano przez" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "Użytkownik, który ostatnio zaktualizował ten obiekt" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Unikalny kod projektu" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Opis projektu" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Klucz ustawień" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Ustawienia wartości" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Wybrana wartość nie jest poprawną opcją" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Wartość musi być wartością binarną" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Wartość musi być liczbą całkowitą" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Wartość musi być poprawną liczbą" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "Wartość nie zgadza się z kontrolą poprawności" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Ciąg musi być unikatowy" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Użytkownik" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Cena" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Cena jednostkowa po określonej ilości" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Punkt końcowy" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktywny" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token dostępu" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Sekret" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Współdzielony sekret dla HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "Id wiadomości" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Unikalny identyfikator dla tej wiadomości" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Host" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Host, od którego otrzymano tę wiadomość" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Nagłówek" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Nagłówek tej wiadomości" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Zawartość" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Treść tej wiadomości" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Opracowany na" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Czy prace nad tą wiadomością zostały zakończone?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Id" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Tytuł" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Łącze" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Opublikowano" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Autor" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Podsumowanie" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Czytaj" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Czy ta wiadomość była przeczytana?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Plik obrazu" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Jednostka Niestandardowa" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Symbol jednostki musi być unikalny" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Nazwa jednostki musi być prawidłowym identyfikatorem" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Nazwa jednostki" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Opcjonalny symbol jednostki" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definicja" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Definicja jednostki" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Załącznik" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Brak pliku" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Brak zewnętrznego odnośnika" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Typ modelu" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "Docelowy typ modelu dla obrazu" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Wybierz plik do załączenia" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Komentarz" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Komentarz do załącznika" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Data dodania" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Data przesłania pliku" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Rozmiar pliku" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Rozmiar pliku w bajtach" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Wartość" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Etykieta" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Kolor" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Model" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Model musi być wybrany" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "Klucz musi być wybrany" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Zablokowany" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Utworzony" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Ostatnia aktualizacja" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Jednostki" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Aktywne" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Szablon" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Dane" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Wartość parametru" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Uwaga" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Wynik" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Doręczono" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Klucz" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} anulowany" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "Nadpisz" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Jest uruchomiony" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Oczekujce zadania" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Zaplanowane zadania" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Zadania zakończone błędem" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID zadania" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Unikalny identyfikator zadania" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Blokada" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Czas blokady" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Nazwa zadania" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Funkcja" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Nazwa funkcji" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumenty" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumenty zadania" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Nazwa pliku" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Typ modelu" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Użytkownik nie ma uprawnień do tworzenia lub edytowania załączników dla tego modelu" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista wyboru jest zablokowana" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Brak grupy" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Adres URL witryny jest zablokowany przez konfigurację" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Wymagane ponowne uruchomienie" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Zmieniono ustawienie, które wymaga restartu serwera" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Oczekujące migracje" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Liczba oczekujących migracji bazy danych" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Aktywne kody ostrzeżeń" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID instancji" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Unikalny identyfikator dla tej instancji InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nazwa instancji serwera" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Użyj nazwy instancji" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nazwa firmy" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Wewnętrzna nazwa firmy" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Bazowy URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Bazowy adres URL dla instancji serwera" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Domyślna waluta" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Interwał aktualizacji waluty" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Jak często aktualizować kursy wymiany walut (ustaw zero aby wyłączyć)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "dni" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Wtyczka aktualizacji waluty" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Pobierz z adresu URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Zezwól na pobieranie zewnętrznych obrazów i plików z zewnętrznego URL" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Limit rozmiaru pobierania" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Ścisła weryfikacja adresu URL" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Wymagaj specyfikacji schematu podczas sprawdzania poprawności adresów URL" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Częstotliwość sprawdzania aktualizacji" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Jak często aktualizować kursy wymiany walut (ustaw zero aby wyłączyć)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Automatyczna kopia zapasowa" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Włącz automatyczną kopię zapasową bazy danych i plików multimedialnych" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Interwał automatycznego tworzenia kopii zapasowych" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Określ liczbę dni między zdarzeniami automatycznej kopii zapasowej" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Interwał usuwania zadań" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Obsługa kodu kreskowego" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "Wyrażenie regularne IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Zezwól na powtarzający się IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Zezwól na edycję IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Skopiuj BOM komponentu" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Możliwość zakupu" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Możliwość sprzedaży" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Części są domyślnie z możliwością sprzedaży" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Części są domyślnie z możliwością śledzenia" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Wirtualny" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Części są domyślnie wirtualne" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Pokaż powiązane części" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Użyj cennika dostawcy" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Nadpisanie historii zakupów" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Ceny wewnętrzne" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Włącz drukowanie etykiet" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Włącz drukowanie etykiet z interfejsu WWW" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "DPI etykiety" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Włącz raporty" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Tryb Debugowania" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Rozmiar strony" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Przekonwertuj walutę" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "Konwertuj wartość przedmiotu na walutę bazową podczas otrzymywania zapasów" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Automatycznie wypełniaj zlecenia zakupu" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatycznie oznacz zlecenia jako zakończone po odebraniu wszystkich pozycji" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Włącz opcję zapomnianego hasła" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Włącz funkcję zapomnianego hasła na stronach logowania" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Włącz rejestrację" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Włącz samodzielną rejestrację dla użytkowników na stronach logowania" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Włącz SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Włącz SSO na stronach logowania" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Włącz rejestrację SSO" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Włącz samodzielną rejestrację przez SSO dla użytkowników na stronach logowania" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "Włącz synchronizację grupy SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Włącz synchronizację grup InvenTree z grupami dostarczonymi przez IdP" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Adres e-mail jest wymagany" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Autouzupełnianie użytkowników SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatycznie wypełnij dane użytkownika z danych konta SSO" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "E-mail dwa razy" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich adres e-mail" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Hasło dwukrotnie" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich hasło" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Grupuj przy rejestracji" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Wymuś MFA" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Użytkownicy muszą używać zabezpieczeń wieloskładnikowych." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Sprawdź wtyczki przy starcie" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Sprawdź dostępność aktualizacji wtyczek" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Włącz okresowe sprawdzanie aktualizacji zainstalowanych wtyczek" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Włącz integrację URL" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Włącz wtyczki, aby dodać ścieżki URL" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Włącz integrację z aplikacją" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Włącz wtyczki, aby dodać aplikacje" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Włącz wtyczki, aby uruchamiać zaplanowane zadania" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "Włącz kody projektów" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Włącz kody projektów do śledzenia projektów" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "Włącz funkcjonalność dla zapisywania historycznych poziomów zapasów i wartości" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "Komponent jest aktywny" msgid "Manufacturer is Active" msgstr "Producent jest aktywny" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Producent" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Firmy" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Opis firmy" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Opis firmy" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Strona WWW" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Witryna internetowa firmy" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Numer telefonu" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Numer telefonu kontaktowego" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontaktowy adres e-mail" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Punkt kontaktowy" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link do informacji o zewnętrznym przedsiębiorstwie" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Czy sprzedajesz produkty tej firmie?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Czy kupujesz przedmioty od tej firmy?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Czy to przedsiębiorstwo produkuje części?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Adres" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Miasto/Region" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Kod pocztowy miasto/region" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Stan/Województwo" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Stan lub województwo" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Kraj" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Kraj" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notatki przewozowe kuriera" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notatki dla kuriera" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Wewnętrzne notatki przewozowe" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notatki wysyłkowe do użytku wewnętrznego" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Komponent producenta" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Część bazowa" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Wybierz część" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Wybierz producenta" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Numer producenta komponentu" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Dostawca" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Wybierz dostawcę" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "koszt podstawowy" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Opakowanie" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Opakowanie części" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Ilość w opakowaniu" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "wielokrotność" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Zamów wiele" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Dostępność zaktualizowana" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "Domyślna waluta używana dla tego dostawcy" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Na stanie" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Ważny" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "Liczba kopii do wydrukowania dla każdej etykiety" msgid "Connected" msgstr "Połączono" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Nieznany" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Numer zamówienia" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Utworzony przez" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Posiada ceny" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Zamówienie" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Komponent wewnętrzny" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Zamówienie oczekujące" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Zakończone" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Zlecenie zakupu" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Zlecenie zakupu" msgid "Sales Order" msgstr "Zamówienie zakupu" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Cena całkowita" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Link do zewnętrznej witryny" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data docelowa" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Data wydania" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Data wystawienia zamówienia" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Odniesienie zamówienia" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Status zamówienia zakupu" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "odebrane przez" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Przeznaczenie" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Pozycja nie pasuje do zlecenia zakupu" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Wartość musi być liczbą dodatnią" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klient" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Data wysyłki" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "wysłane przez" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Ilość elementów" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Odebrane" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Cena zakupu" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Cena zakupu jednostkowego" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Cena sprzedaży" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Jednostkowa cena sprzedaży" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Wysłane" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Wysłana ilość" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Data wysyłki" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Sprawdzone przez" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Przesyłka" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Numer przesyłki" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Numer śledzenia" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Informacje o śledzeniu przesyłki" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Przesyłka została już wysłana" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Linia" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Komponent" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopiuj parametry" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Zlecenie zakupu musi być określone" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Dostawca musi być zgodny ze zleceniem zakupu" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Zlecenie zakupu musi być zgodne z dostawcą" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data ważności" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Kod kreskowy" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "Zwrot pieniędzy" msgid "Reject" msgstr "Odrzuć" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Zaległe zlecenie zakupu" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Zlecenie zakupu {po} jest teraz zaległe" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "Kategoria komponentu" msgid "Part Categories" msgstr "Kategorie części" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Domyślna lokalizacja" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "Wartość domyślna" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Części" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Nazwa komponentu" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Czy szablon" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Czy ta część stanowi szablon części?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Czy ta część jest wariantem innej części?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Wariant" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Słowa kluczowe" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Wersja" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Domyślne wygasanie" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Czy ten komponent może być zbudowany z innych komponentów?" -#: part/models.py:1260 +#: part/models.py:1254 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:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Czy ta część wymaga śledzenia każdego towaru z osobna?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Czy ta część jest aktywna?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 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:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Tworzenie użytkownika" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Nazwa testu" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Testowy opis" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Wprowadź opis do tego testu" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Wymagane" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Wymaga wartości" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Wymaga załącznika" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Ten element BOM jest opcjonalny" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Notatki pozycji BOM" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Zatwierdzone" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Część zastępcza" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Część 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Część 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Waluta zakupu tego towaru" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopiuj obraz" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Kopiuj parametry" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Towary" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Duplikuj część" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "Wtyczka" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nie znaleziono autora" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "Instalacja nie została potwierdzona" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Pełne przeładowanie" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Wykonaj pełne przeładowanie rejestru wtyczek" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Wymuś przeładowanie" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Wymuś przeładowanie rejestru wtyczek, nawet jeśli jest już załadowany" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Zbierz wtyczki" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Zbierz wtyczki i dodaj je do rejestru" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Aktywuj wtyczkę" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Aktywuj tę wtyczkę" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "Razem" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Numer Seryjny" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Zainstalowane elementy" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "Lokacje stanu magazynowego" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Właściciel" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Wybierz właściciela" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Nadrzędny towar" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Część podstawowa" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Wybierz pasującą część dostawcy dla tego towaru" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Zainstalowane w" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Ilość w magazynie" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Wyszukaj zlecenie zakupu" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Zlecenie zakupu dla tego towaru" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Usuń po wyczerpaniu" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Ilość musi być liczbą całkowitą" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Notatki do wpisu" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Należy podać wartość dla tego testu" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Wynik testu" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Element nadrzędny" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Termin minął" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Elementy podrzędne" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Numer seryjny już istnieje" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Podlokalizacje" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Część musi być dostępna do sprzedaży" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Czy to konto użytkownika jest aktywne" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Twoje konto zostało utworzone." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Zresetuj hasło" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Witamy w InvenTree" diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po index c8d7485abe..e403c99d6a 100644 --- a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API endpoint não encontrado" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Usuário não tem permissão para ver este modelo" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Não foi possível converter {original} para {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Quantidade fornecida inválida" @@ -112,13 +104,13 @@ msgstr "Insira uma Data" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Anotações" @@ -131,75 +123,91 @@ msgstr "Valor '{name}' não está no formato correto" msgid "Provided value does not match required pattern: " msgstr "O valor fornecido não corresponde ao padrão exigido: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Número serial em branco" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Número de série duplicado" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Intervalo do grupo {group} excede a quantidade permitida ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Nenhum número de série foi encontrado" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Remova as \"tags\" HTML deste valor" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Erro de conexão" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "O servidor respondeu com código estado inválido" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Ocorreu uma exceção" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "O servidor respondeu com valor inválido do tamanho de conteúdo" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Tamanho da imagem muito grande" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "O download da imagem excedeu o tamanho máximo" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "O servidor remoto retornou resposta vazia" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "A URL fornecida não é um arquivo de imagem válido" @@ -207,11 +215,11 @@ msgstr "A URL fornecida não é um arquivo de imagem válido" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "O número de referência é muito grande" msgid "Invalid choice" msgstr "Escolha inválida" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Descrição" msgid "Description (optional)" msgstr "Descrição (opcional)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Caminho" @@ -313,75 +321,66 @@ msgstr "Hash exclusivo de dados de código de barras" msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Erro de servidor" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Log de erro salvo pelo servidor." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Imagem" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Preicsa ser um numero valido" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Selecione a Moeda nas opções disponíveis" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Imagens Remota" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL do arquivo de imagem remoto" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Baixar imagens de URL remota não está habilitado" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Chinês (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chinês (Tradicional)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "Unidade física inválida" msgid "Not a valid currency code" msgstr "Não é um código de moeda válido" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Situação do pedido" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Produção Progenitor" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "Peça" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categoria" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Produção deve ser cancelada antes de ser deletada" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Consumível" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montagem" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Monitorado" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Alocado" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponível" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "No pedido" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordem de Produção" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Local" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Ordens de Produções" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Usuário ou grupo responsável deve ser especificado" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Peça da ordem de produção não pode ser alterada" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Referência do pedido de produção" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Referência do pedido de produção" msgid "Reference" msgstr "Referência" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Breve descrição da produção (opcional)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Selecionar peça para produção" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referência do pedido de venda" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Local de Origem" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selecione a localização para pegar do estoque para esta produção (deixe em branco para tirar a partir de qualquer local de estoque)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Local de Destino" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Selecione o local onde os itens concluídos serão armazenados" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Quantidade de Produção" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Número de itens em estoque para produzir" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Itens concluídos" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Número de itens em estoque concluídos" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Progresso da produção" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Código de Lote" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Código do lote para esta saída de produção" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Criado em" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Data alvo final" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data alvo para finalização de produção. Estará atrasado a partir deste dia." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Data de conclusão" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "Concluído por" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Usuário que emitiu este pedido de produção" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsável" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Usuário ou grupo responsável para este pedido de produção" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Link Externo" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link para URL externa" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Prioridade de Produção" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioridade deste pedido de produção" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Código do projeto" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Código do projeto para este pedido de produção" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Falha ao descarregar tarefa para concluir alocações de construção" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "O Pedido de produção {build} foi concluído!" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Um pedido de produção foi concluído" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Números de série devem ser fornecidos para peças rastreáveis" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nenhuma saída de produção especificada" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Saída de produção já completada" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Saída da produção não corresponde ao Pedido de Produção" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Quantidade não pode ser maior do que a quantidade de saída" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "O item de produção {serial} não passou todos os testes necessários" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Item da linha de Produção" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Objeto de produção" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Objeto de produção" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Quantidade" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Quantidade necessária para o pedido de produção" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de produção deve especificar a saída, pois peças mestres estão marcadas como rastreáveis" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Item estoque selecionado não coincide com linha da LDM" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Quantidade deve ser 1 para estoque serializado" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em estoque ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Item de estoque" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Origem do item em estoque" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Instalar em" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Destino do Item do Estoque" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nome da Peça" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Saída da Produção" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Saída de produção não coincide com a produção progenitora" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Peça de saída não coincide com a peça da ordem de produção" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Esta saída de produção já foi concluída" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "A saída de produção não está completamente alocada" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Entre a quantidade da saída de produção" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantidade inteira necessária, pois a lista de materiais contém peças rastreáveis" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Números de Série" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Digite os números de série para saídas de produção" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Local de estoque para a produção" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alocar automaticamente os itens necessários com os números de série correspondentes" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Os seguintes números de série já existem ou são inválidos" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Uma lista de saídas de produção deve ser fornecida" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas recicladas" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar quaisquer alocações de estoque para saídas sucateadas" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Motivo para sucatear saída(s) de produção" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consumir Estoque Alocado" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consumir qualquer estoque que já tenha sido alocado para esta produção" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Remover Saídas Incompletas" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Aceitar conforme consumido por esta ordem de produção" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar este pedido de produção" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Estoque sobrealocado" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Como deseja manejar itens de estoque extras atribuídos ao pedido de produção" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrealocados" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta produção" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceitar que o número requerido de saídas de produção não foi concluído" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Quantidade de produção requerida não foi concluída" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Pedido de produção tem saídas incompletas" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linha de produção" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Saída da Produção" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Saída de produção deve indicar a mesma produção" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bin_item.part deve indicar a mesma peça do pedido de produção" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Item deve estar em estoque" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Saída de produção deve ser definida para alocação de peças rastreadas" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Saída de produção deve ser definida para alocação de peças não rastreadas" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Alocação do Item precisa ser fornecida" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Local de estoque onde peças serão extraídas (deixar em branco para qualquer local)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Local não incluso" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Não incluir itens de estoque deste local" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Estoque permutável" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Itens de estoque em múltiplos locais pode ser permutável" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Substituir Estoque" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Alocar itens LDM opcionais para o pedido de produção" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Falha ao iniciar tarefa de auto-alocação" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Fornecedor da Peça" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variações" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item LDM" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Completado" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Estoque obrigatório para o pedido de produção" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Pedido de produção vencido" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Pedido de produção {bo} está atrasada" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "É uma Ligação" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "O Utilizador não tem permissão para remover este anexo" @@ -1555,794 +1554,794 @@ msgstr "Sem extensão" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Atualizado" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Tempo da última atualização" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Código único do projeto" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Descrição do projeto" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Usuário ou grupo responsável por este projeto" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Valor da Configuração" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Valor escolhido não é uma opção válida" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Valor deve ser um valor booleano" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Valor deve ser um número inteiro" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "A frase senha deve ser diferenciada" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Usuario" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Preço" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Preço unitário na quantidade especificada" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Ponto final" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Ponto final em qual o gancho web foi recebido" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Nome para este webhook" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Ativo" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Este gancho web está ativo" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token de acesso" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Segredo" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Segredo compartilhado para HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "ID da Mensagem" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Identificador exclusivo desta mensagem" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Servidor" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Servidor do qual esta mensagem foi recebida" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Cabeçalho" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Cabeçalho da mensagem" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Corpo" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Corpo da mensagem" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Ponto do qual esta mensagem foi recebida" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Trabalhado em" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "O trabalho desta mensagem foi concluído?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Título" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Ligação" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Publicado" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Autor" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Resumo" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Lida" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Esta notícia do item foi lida?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Arquivo de imagem" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Nome da unidade deve ser um identificador válido" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Nome da unidade" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Símbolo de unidade opcional" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definição" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Definição de unidade" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Anexo" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Arquivo ausente" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Link externo não encontrado" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Selecione arquivo para anexar" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Comentario" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Criado" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Última atualização" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Modelo de parâmetro" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Parâmetros da caixa de seleção não podem ter unidades" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Os parâmetros da caixa de seleção não podem ter escolhas" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Escolhas devem ser únicas" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Nome do modelo de parâmetro deve ser único" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Nome do Parâmetro" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Unidades" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Unidades físicas para este parâmetro" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Descrição do Parâmetro" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Caixa de seleção" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Este parâmetro é uma caixa de seleção?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Escolhas" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opções válidas para este parâmetro (separadas por vírgulas)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Escolha inválida para valor do parâmetro" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Modelo" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Dados" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Valor do Parâmetro" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Anotação" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Campo opcional de notas" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chave" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} cancelado" msgid "A order that is assigned to you was canceled" msgstr "Um pedido atribuído a você foi cancelado" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Itens Recebidos" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Executando" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Tarefas Pendentes" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tarefas Agendadas" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tarefas com Falhas" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID da Tarefa" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ID Único da Tarefa" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Tempo de bloqueio" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Nome da tarefa" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Função" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Nome da função" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumentos da tarefa" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argumentos de Palavra-chave" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argumentos Palavra-chave da Tarefa" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Nome do arquivo" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Nenhum grupo" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "URL do site está bloqueada por configuração" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Reinicialização necessária" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Uma configuração que requer uma reinicialização do servidor foi alterada" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migrações pendentes" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Número de migrações pendentes na base de dados" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nome da Instância do Servidor" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Descritor de frases para a instância do servidor" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Usar nome da instância" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Usar o nome da instância na barra de título" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Restringir a exibição 'sobre'" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Mostrar 'sobre' modal apenas para superusuários" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nome da empresa" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Nome interno da Empresa" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "URL de Base" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "URL Base da instância do servidor" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Moeda Padrão" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Selecione a moeda base para cálculos de preços" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Moedas suportadas" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Lista de códigos de moeda suportados" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Intervalo de Atualização da Moeda" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Com que frequência atualizar as taxas de câmbio (defina como zero para desativar)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "dias" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Extensão de Atualização de Moeda" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Extensão de Atualização de Moeda a utilizar" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Baixar do URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Permitir baixar imagens remotas e arquivos de URLs externos" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Limite de tamanho para baixar" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Maior tamanho de imagem remota baixada permitida" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "Usuário-agente utilizado para baixar da URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir a substituição de imagens e arquivos usados baixados por usuário-agente (deixar em branco por padrão)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Validação rigorosa de URL" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Exigir especificação de esquema ao validar URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Atualizar Intervalo de Verificação" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Frequência para verificar atualizações (defina como zero para desativar)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Cópia de Segurança Automática" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Ativar cópia de segurança automática do banco de dados e arquivos de mídia" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Intervalo de Backup Automático" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Especificar o número de dia entre as cópias de segurança" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Intervalo para Excluir da Tarefa" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Os resultados da tarefa no plano de fundo serão excluídos após um número especificado de dias" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Intervalo para Excluir do Registro de Erro" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Registros de erros serão excluídos após um número especificado de dias" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Intervalo para Excluir de Notificação" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Notificações de usuários será excluído após um número especificado de dias" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Suporte aos códigos de barras" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Ativar suporte a leitor de código de barras na interface web" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Atraso na entrada de código de barras" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Tempo de atraso de processamento de entrada de barras" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Suporte a código de barras via Câmera" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir escanear código de barras por câmera pelo navegador" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Revisões de peças" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisão para a Peça" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Permitir a exclusão da Montagem" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permitir a remoção de peças usadas em uma montagem" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Padrão de expressão regular adequado para Peça IPN" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Permitir Duplicação IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que várias peças compartilhem o mesmo IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Permitir Edição IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Permitir trocar o valor do IPN enquanto se edita a peça" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Copiar dados da LDM da Peça" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar dados da LDM por padrão quando duplicar a peça" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Copiar Dados de Parâmetro da Peça" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar dados de parâmetros por padrão quando duplicar uma peça" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Copiar Dados Teste da Peça" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Copiar dados de teste por padrão quando duplicar a peça" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Copiar Parâmetros dos Modelos de Categoria" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Copiar parâmetros do modelo de categoria quando criar uma peça" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Peças são modelos por padrão" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Peças podem ser montadas a partir de outros componentes por padrão" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Componente" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Peças podem ser usadas como sub-componentes por padrão" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Comprável" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Vendível" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Peças vão vendíveis por padrão" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Peças vão rastreáveis por padrão" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Peças são virtuais por padrão" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Mostra peças relacionadas" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Mostrar peças relacionadas para uma peça" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Dados Iniciais de Estoque" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir Criação de estoque inicial quando adicional uma nova peça" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Dados Iniciais de Fornecedor" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir criação de dados iniciais de fornecedor quando adicionar uma nova peça" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Formato de Exibição do Nome da Peça" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Formato para exibir o nome da peça" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Ícone de Categoria de Peça Padrão" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Ícone padrão de categoria de peça (vazio significa sem ícone)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de Casas Decimais do Preço" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mínimo número de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Máximo Casas Decimais de Preço" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Usar Preços do Fornecedor" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir quebras de preço do fornecedor nos cálculos de preços globais" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Sobrescrever histórico de compra" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Histórico do pedido de compra substitui os intervalos dos preços do fornecedor" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Usar Preços do Item em Estoque" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar preço inserido manualmente no estoque para cálculos de valores" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Idade do preço do Item em Estoque" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Não incluir itens em estoque mais velhos que este número de dias no cálculo de preços" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Usar Preço Variável" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir preços variáveis nos cálculos de valores gerais" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Apenas Ativar Variáveis" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Apenas usar peças variáveis ativas para calcular preço variáveis" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Intervalo de Reconstrução de Preços" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Número de dias antes da atualização automática dos preços das peças" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Preços Internos" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Habilitar preços internos para peças" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Sobrepor Valor Interno" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Se disponível, preços internos sobrepõe variação de cálculos de preço" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Ativar impressão de etiquetas" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Ativar impressão de etiqueta pela interface da internet" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "DPI da Imagem na Etiqueta" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolução de DPI quando gerar arquivo de imagens para fornecer à extensão de impressão de etiquetas" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Habilitar Relatórios" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Ativar geração de relatórios" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Modo de depuração" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Gerar relatórios em modo de depuração (saída HTML)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Relatório de erros" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Registro de erros que ocorrem ao gerar relatórios" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Tamanho da página" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Tamanho padrão da página PDF para relatórios" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Forçar Unidades de Parâmetro" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Se as unidades são fornecidas, os valores do parâmetro devem corresponder às unidades especificadas" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Seriais Únicos Globais" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Números de série para itens de estoque devem ser globalmente únicos" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Excluir Estoque Esgotado" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina o comportamento padrão quando um item de estoque é esgotado" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Modelo de Código de Lote" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Modelo para gerar códigos de lote padrão para itens de estoque" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Validade do Estoque" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Ativar função de validade de estoque" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Vender estoque expirado" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Permitir venda de estoque expirado" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Tempo de Estoque Inativo" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de dias em que os itens em estoque são considerados obsoleto antes de vencer" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Produzir Estoque Vencido" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Permitir produção com estoque vencido" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Controle de propriedade do estoque" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Ativar controle de propriedade sobre locais e itens de estoque" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Ícone padrão do local de estoque" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Ícone padrão de local de estoque (vazio significa sem ícone)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Mostrar Itens de Estoque Instalados" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Exibir itens de estoque instalados nas tabelas de estoque" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Verificar BOM ao instalar itens" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Itens de estoque instalados devem existir na BOM para a peça parente" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Permitir Transferência Fora do Estoque" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que os itens que não estão em estoque sejam transferidos entre locais de estoque" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Produção" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Produção" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Requer Proprietário Responsável" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Um proprietário responsável deve ser atribuído a cada ordem" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Bloquear até os Testes serem Aprovados" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Impedir que as saídas da produção sejam concluídas até que todos os testes sejam aprovados" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Ativar Pedidos de Devolução" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Ativar funcionalidade de pedido de retorno na interface do usuário" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Devolução" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Editar os Pedidos de Devolução Concluídos" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir a edição de pedidos de devolução após serem enviados ou concluídos" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Venda" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Venda" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Envio Padrão de Pedidos de Venda" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar criação de envio padrão com Pedidos de Vendas" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Editar os Pedidos de Vendas concluídos" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de vendas após serem enviados ou concluídos" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Compras" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Compra" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Editar Pedidos de Compra Concluídos" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de compras após serem enviados ou concluídos" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Pedidos de Compra" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automaticamente os pedidos de compra como concluídos quando todos os itens de linha forem recebidos" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Habitar esquecer senha" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Habilitar a função \"Esqueci minha senha\" nas páginas de acesso" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Habilitar cadastro" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Ativar auto-registro para usuários na página de entrada" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Ativar SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Ativar SSO na página de acesso" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Ativar registro SSO" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Ativar auto-registro por SSO para usuários na página de entrada" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Email obrigatório" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Exigir do usuário o e-mail no cadastro" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Auto-preencher usuários SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Preencher automaticamente os detalhes do usuário a partir de dados da conta SSO" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Enviar email duplo" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "No registro pedir aos usuários duas vezes pelo email" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Senha duas vezes" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "No registro pedir aos usuários duas vezes pela senha" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Domínios permitidos" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir registros a certos domínios (separados por vírgula, começando com @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Grupo no cadastro" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Forçar AMF" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Os usuários devem usar uma segurança multifator." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Checar extensões no início" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Checar que todas as extensões instaladas no início — ativar em ambientes de contêineres" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Verificar por atualizações de plugin" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Habilitar verificações periódicas de atualizações para plugins instalados" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Ativar integração URL" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Ativar extensão para adicionar rotas URL" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Ativar integração de navegação" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Ativar extensões para integrar à navegação" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Ativa integração com aplicativo" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Ativar extensões para adicionar aplicativos" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Ativar integração do calendário" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Ativar extensões para executar tarefas agendadas" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Ativar integração de eventos" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Ativar extensões para responder a eventos internos" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Excluir Locais Externos" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Período de Balanço Automático" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Mostrar nomes completos dos usuários" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Mostrar Nomes Completos em vez de Nomes de Usuário" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Empresas" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Descrição da empresa" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Descrição da empresa" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Página Web" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "URL do Site da empresa" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Número de telefone" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Número de telefone do contato" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Endereço de e-mail do contato" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contato" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Ponto de contato" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link para informações externas da empresa" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Você vende itens para esta empresa?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Você compra itens desta empresa?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Esta empresa fabrica peças?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Moeda padrão utilizada para esta empresa" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Endereço" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Endereços" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Selecione a Empresa" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Título do endereço" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Título descrevendo a entrada de endereço" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Endereço Principal" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Definir como endereço principal" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Linha 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Linha de endereço 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Linha 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Linha de endereço 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Código Postal" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Cidade/Região" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Código Postal Cidade / Região" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Estado/Provincia" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Estado ou Província" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "País" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "País do endereço" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notas de envio da transportadora" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notas para o envio da transportadora" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Notas de envio interno" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notas de envio para uso interno" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Peça do Fabricante" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Peça base" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Selecionar peça" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "NPF" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Número de Peça do Fabricante" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL do link externo da peça do fabricante" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Descrição da peça do fabricante" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Unidades de pacote devem ser compatíveis com as unidades de peça base" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Unidades de pacote deve ser maior do que zero" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fornecedor" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Selecionar peça do fabricante" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL do link externo da peça do fabricante" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "preço base" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Embalagem" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Embalagem de peças" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Quantidade de embalagens" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantidade total fornecida em um único pacote. Deixe em branco para itens únicos." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "múltiplo" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Pedir múltiplos" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Quantidade disponível do fornecedor" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilidade Atualizada" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Data da última atualização da disponibilidade dos dados" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "Moeda padrão utilizada para este fornecedor" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Em Estoque" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Válido" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Desconhecido" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Referência do Pedido" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Criado por" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Pedido" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Peça Interna" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Concluído" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Pedido de Compra" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Pedido de Compra" msgid "Sales Order" msgstr "Pedido de Venda" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Preço Total" msgid "Total price for this order" msgstr "Preço total deste pedido" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Moeda do pedido" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Moeda para este pedido (deixe em branco para usar o padrão da empresa)" @@ -4851,718 +4870,742 @@ msgstr "Moeda para este pedido (deixe em branco para usar o padrão da empresa)" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "O contato não corresponde à empresa selecionada" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Descrição do pedido (opcional)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Selecione o código do projeto para este pedido" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Link para página externa" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data alvo" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Data esperada para entrega do pedido. O Pedido estará atrasado após esta data." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Data de emissão" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Dia que o pedido foi feito" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Usuário ou grupo responsável para este pedido" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Ponto de contato para este pedido" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Endereço da empresa para este pedido" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Referência do pedido" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Situação" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Situação do pedido de compra" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Empresa da qual os itens estão sendo encomendados" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Referencia do fornecedor" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Código de referência do pedido fornecedor" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "recebido por" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Dia que o pedido foi concluído" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Destino" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Fornecedor de peça deve corresponder a fornecedor da OC" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "O item de linha não corresponde ao pedido de compra" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Quantidade deve ser um número positivo" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Empresa para qual os itens foi vendidos" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Referência do Cliente " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Código de Referência do pedido do cliente" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Data de Envio" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Apenas um pedido aberto pode ser marcado como completo" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Pedido não pode ser concluído, pois, há envios incompletos" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "Pedido não pode ser concluído, pois, há itens na linha incompletos" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Quantidade do item" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Referência do Item em Linha" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Observações do Item de Linha" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Data alvo para este item de linha (deixe em branco para usar a data alvo do pedido)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Descrição item de linha (opcional)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Contexto adicional para esta linha" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Preço Unitário" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "A peça do fornecedor deve corresponder ao fornecedor" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Fornecedor da Peça" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Recebido" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Preço de Compra" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Preço unitário de compra" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Apenas peças vendáveis podem ser atribuídas a um pedido de venda" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Preço de Venda" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Preço de venda unitário" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Quantidade enviada" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Data do envio" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Data de Entrega" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Data da entrega do envio" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Verificado por" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Usuário que verificou esta remessa" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Remessa" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Número do Envio" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Número de Rastreamento" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Informação de rastreamento da remessa" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Número da Fatura" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Número de referência para fatura associada" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "O pedido já foi enviado" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Remessa não foi alocada nos itens de estoque" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "O item do estoque não foi atribuído" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Não é possível alocar o item de estoque para uma linha de uma peça diferente" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Não é possível alocar uma linha sem uma peça" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A quantidade de alocação não pode exceder a quantidade em estoque" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Quantidade alocada deve ser maior que zero" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "Quantidade deve ser 1 para item de estoque serializado" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Pedidos de venda não coincidem com a remessa" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Remessa não coincide com pedido de venda" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Linha" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Referência de remessa do pedido de venda" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Selecione o item de estoque para alocar" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Insira a quantidade de atribuição de estoque" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Referência de Pedidos de Devolução" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Empresa da qual os itens estão sendo retornados" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Estado do pedido de retorno" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Selecione o item a ser devolvido pelo cliente" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Data de Recebimento" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Despesa/gastos" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Gastos com esta linha de itens" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Gastos para reparar e/ou devolver esta linha de itens" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Copiar Parâmetros" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Itens de linha" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Nome do Fornecedor" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Pedido não pode ser cancelado" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir que o pedido seja fechado com itens de linha incompletos" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "O pedido tem itens da linha incompletos" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "O pedido não está aberto" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Moeda de preço de compra" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Numero interno do produto" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "A peça do fornecedor deve ser especificada" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "O pedido de compra deve ser especificado" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "O fornecedor deve corresponder o pedido de compra" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Pedido de compra deve corresponder ao fornecedor" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Itens de linha" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Selecione o local de destino para os itens recebidos" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Digite o código do lote para itens de estoque recebidos" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data de validade" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Digite o número de série para itens de estoque recebidos" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Código de barras já em uso" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Itens de linha deve ser providenciados" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Loca de destino deve ser especificado" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Código de barras fornecido deve ser único" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Envios concluídos" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Moeda de preço de venda" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Nenhum detalhe da remessa fornecido" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Item de linha não está associado a este pedido" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Quantidade deve ser positiva" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Digite números de série para alocar" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "O pedido já foi enviado" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "O envio não está associado a este pedido" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Nenhuma correspondência encontrada para os seguintes números de série" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Devolver item do pedido" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Item do pedido não bate com o pedido de devolução" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Item do pedido já foi recebido" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Itens só podem ser recebidos de pedidos em processamento" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Tipo de moeda para o item do pedido" @@ -5598,146 +5641,146 @@ msgstr "Reembolsar" msgid "Reject" msgstr "Recusar" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Pedido de compra vencido" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Pedido de compra {po} está atrasada" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Pedido de venda vencido" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Pedido de venda {so} está atrasada" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "Categoria da Peça" msgid "Part Categories" msgstr "Categorias de Peça" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Local Padrão" @@ -5778,7 +5821,7 @@ msgstr "Palavras-chave padrão para peças nesta categoria" msgid "Icon" msgstr "Ícone" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ícone (opcional)" @@ -5799,7 +5842,7 @@ msgstr "Valor Padrão" msgid "Default Parameter Value" msgstr "Valor Padrão do Parâmetro" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Peças" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Item em estoque com este número de série já existe" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "Não é permitido duplicar IPN em configurações de partes" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Uma parte com este Nome, IPN e Revisão já existe." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Peças não podem ser atribuídas a categorias estruturais!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Nome da peça" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "É um modelo" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Esta peça é uma peça modelo?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Esta peça é variante de outra peça?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Descrição da peça (opcional)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Palavras chave" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Palavras-chave para melhorar a visibilidade nos resultados da pesquisa" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Revisão de peça ou número de versão" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Revisão" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Onde este item é armazenado normalmente?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Validade Padrão" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Validade (em dias) para itens do estoque desta peça" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Estoque Mínimo" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Nível mínimo de estoque permitido" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Unidade de medida para esta peça" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Essa peça pode ser construída a partir de outras peças?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Essa peça pode ser usada para construir outras peças?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Esta parte tem rastreamento para itens únicos?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Esta peça pode ser comprada de fornecedores externos?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Esta peça pode ser vendida a clientes?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Esta parte está ativa?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "Esta é uma peça virtual, como um software de produto ou licença?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Soma de Verificação da LDM" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Soma de verificação da LDM armazenada" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "LDM conferida por" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "LDM verificada no dia" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Criação de Usuário" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Proprietário responsável por esta peça" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Venda múltipla" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Moeda usada para armazenar os cálculos de preços" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Custo Mínimo da LDM" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Custo mínimo das peças componentes" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Custo Máximo da LDM" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Custo máximo das peças componentes" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Custo Mínimo de Compra" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Custo mínimo histórico de compra" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Custo Máximo de Compra" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Custo máximo histórico de compra" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Preço Interno Mínimo" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Custo mínimo baseado nos intervalos de preço internos" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Preço Interno Máximo" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Custo máximo baseado nos intervalos de preço internos" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Preço Mínimo do Fornecedor" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Preço mínimo da peça de fornecedores externos" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Preço Máximo do Fornecedor" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Preço máximo da peça de fornecedores externos" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Custo Mínimo variável" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Custo mínimo calculado das peças variáveis" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Custo Máximo Variável" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Custo máximo calculado das peças variáveis" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Custo Mínimo" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Sobrepor o custo mínimo" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Custo Máximo" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Sobrepor o custo máximo" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Custo total mínimo calculado" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Custo total máximo calculado" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Preço Mínimo de Venda" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Preço mínimo de venda baseado nos intervalos de preço" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Preço Máximo de Venda" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Preço máximo de venda baseado nos intervalos de preço" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Custo Mínimo de Venda" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Preço histórico mínimo de venda" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Custo Máximo de Venda" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Preço histórico máximo de venda" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Peça para Balanço" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Total de Itens" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Número de entradas de estoques individuais no momento do balanço" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Estoque total disponível no momento do balanço" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Data de realização do balanço" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Custo Mínimo de Estoque" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Custo mínimo estimado de estoque disponível" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Custo Máximo de Estoque" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Custo máximo estimado de estoque disponível" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Nome de Teste" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Insira um nome para o teste" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Descrição do Teste" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Digite a descrição para este teste" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Requerido" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Este teste é obrigatório passar?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Requer Valor" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Este teste requer um valor ao adicionar um resultado de teste?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Anexo obrigatório" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Este teste requer um anexo ao adicionar um resultado de teste?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Selecione a Peça Parental" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Selecionar peça a ser usada na LDM" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Quantidade de LDM para este item LDM" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Este item LDM é opcional" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este item LDM é consumível (não é rastreado nos pedidos de construção)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Referência do Item LDM" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Notas do Item LDM" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Soma de verificação" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Soma de Verificação da LDM da linha" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Validado" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "O item da LDM foi validado" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Obtém herdados" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este item da LDM é herdado por LDMs para peças variáveis" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Itens de estoque para as peças das variantes podem ser usados para este item LDM" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Quantidade deve ser valor inteiro para peças rastreáveis" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Sub peça deve ser especificada" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Substituir Item da LDM" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "A peça de substituição não pode ser a mesma que a peça mestre" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Item LDM Parental" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Substituir peça" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Selecionar Peça Relacionada" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Relacionamento da peça não pode ser criada com ela mesma" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Relação duplicada já existe" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Categoria de peça pai" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Sub-categorias" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Moeda de compra deste item de estoque" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Peça Original" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Selecione a peça original para duplicar" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Copiar imagem" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copiar LDM" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Copiar lista de materiais da peça original" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Copiar Parâmetros" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Copiar dados do parâmetro da peça original" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Quantidade Inicial de Estoque" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Especificar a quantidade inicial de estoque para a peça. Se for zero, nenhum estoque é adicionado." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Local Inicial do Estoque" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Especifique o local do estoque inicial para esta Peça" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Selecione o fornecedor (ou deixe em branco para pular)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecione fabricante (ou deixe em branco para pular)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Número de Peça do Fabricante" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "A empresa selecionada não é um fornecedor válido" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "A empresa selecionada não é um fabricante válido" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "A peça do fabricante que corresponde a essa MPN já existe" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "A peça do fornecedor que corresponde a essa SKU já existe" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Nome da Categoria" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Produzindo" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Peça duplicada" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Copiar dados iniciais de outra peça" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Estoque inicial" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Criar peça com a quantidade inicial de estoque" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Informações do Fornecedor" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Adicionar informação inicial de fornecedor para esta peça" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Copiar Parâmetros da Categoria" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Copiar modelos de parâmetros a partir de categoria de peça selecionada" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Imagem Existente" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Nome de arquivo de uma imagem de peça existente" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "A imagem não existe" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Validar a Lista de Materiais completa" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Pode Produzir" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Preço Mínimo" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Sobrepor valor calculado para preço mínimo" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Moeda do preço mínimo" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Preço Máximo" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Sobrepor valor calculado para preço máximo" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Moeda do preço máximo" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Atualizar preços desta peça" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Não foi possível converter das moedas fornecidas para {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Preço mínimo não pode ser maior que o preço máximo" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Preço máximo não pode ser menor que o preço mínimo" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Selecionar peça para copiar a LDM" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Remover Dado Existente" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Remova itens LDM existentes antes de copiar" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Incluir Herdados" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluir itens LDM que são herdados de peças modelo" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Pular Linhas inválidas" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Habilitar esta opção para pular linhas inválidas" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Copiar Peças Substitutas" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copiar peças de substitutas quando duplicar itens de LDM" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notificação de estoque baixo" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "O estoque disponível para {part.name} caiu abaixo do nível mínimo definido" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "Fornece suporte para escanear códigos de barras TME" msgid "The Supplier which acts as 'TME'" msgstr "O fornecedor que atua como 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin instalado com sucesso" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Plugin instalado na {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "Extensões" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nenhum autor encontrado" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "A extensão '{p}' não é compatível com a versão atual do InvenTree {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Extensão requer pelo menos a versão {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Extensão requer no máximo a versão {v}" @@ -7884,51 +7937,51 @@ msgstr "Instalação não confirmada" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Recarregamento completo" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Realize um recarregamento completo do registro de plugin" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Forçar recarregamento" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Forçar um recarregamento do registro do plugin, mesmo que já esteja carregado" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Coletar plugins" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Colete plugins e adicione-os ao registro" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Ativar Extensão" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Ativar esta extensão" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Número de Sério" @@ -8215,7 +8268,7 @@ msgstr "Relatório Teste do Item em Estoque" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Itens instalados" @@ -8248,184 +8301,196 @@ msgstr "Sem resultado (obrigatório)" msgid "No result" msgstr "Nenhum resultado" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "O arquivo não existe" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Arquivo de imagem não encontrado" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "Tag part_image necessita de uma instância de Peça" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "Tag company_image necessita de uma instância de Empresa" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Código da situação" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Localização externa" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Árvore de Peças" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Data de validade antes" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Data de validade depois" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Inativo" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Quantidade obrigatória" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Uma peça válida deve ser fornecida" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "A peça do fornecedor informado não existe" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "A peça do fornecedor tem um tamanho de pacote definido, mas o item use_pack_size não foi definida" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Números de série não podem ser fornecidos para uma parte não rastreável" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "Tipos de Locais de estoque" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Ícone padrão para todos os locais que não tem um ícone (opcional)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Localização do estoque" @@ -8449,11 +8514,11 @@ msgstr "Localização do estoque" msgid "Stock Locations" msgstr "Locais de estoque" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Responsavel" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Selecionar Responsável" @@ -8481,274 +8546,274 @@ msgstr "Tipo de Local de Estoque para esta locação" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Você não pode tornar este local do estoque estrutural, pois alguns itens de estoque já estão localizados nele!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Os itens de estoque não podem estar localizados em locais de estoque estrutural!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Item de estoque não pode ser criado para peças virtuais" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Tipo de peça('{self.supplier_part.part}') deve ser {self.part}" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "A quantidade deve ser 1 para um item com número de série" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Número de série não pode ser definido se quantidade maior que 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "O item não pode pertencer a si mesmo" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Item deve ter uma referência de produção se is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Referência de produção não aponta ao mesmo objeto da peça" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Item de Estoque Parental" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Peça base" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Selecione uma peça do fornecedor correspondente para este item de estoque" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Onde está localizado este item de estoque?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Embalagem deste item de estoque está armazenado em" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Instalado em" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Este item está instalado em outro item?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Número de série para este item" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Código do lote para este item de estoque" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Quantidade de Estoque" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Produção de Origem" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Produção para este item de estoque" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Consumido por" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Pedido de produção que consumiu este item de estoque" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Pedido de compra Fonte" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Pedido de Compra para este item de estoque" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Destino do Pedido de Venda" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Data de validade para o item de estoque. Estoque será considerado expirado após este dia" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Excluir quando esgotado" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Excluir este item de estoque quando o estoque for esgotado" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Preço de compra unitário único no momento da compra" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Convertido para peça" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Peça não está definida como rastreável" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Quantidade deve ser inteira" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Quantidade não deve exceder a quantidade em estoque ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "A quantidade não corresponde aos números de série" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Item em estoque foi reservado para um pedido" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Item em estoque está instalado em outro item" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "item em estoque contem outro(s) items" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Item em estoque foi reservado para outro cliente" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Item no estoque está em produção no momento" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Itens de série não podem ser mesclados" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Item de estoque duplicado" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Itens de estoque devem se referir à mesma peça" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Itens de estoque devem se referir à mesma peça do fornecedor" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Códigos de estado do estoque devem corresponder" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Item do estoque não pode ser realocado se não houver estoque da mesma" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Observações de entrada" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Deve-se fornecer o valor desse teste" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "O anexo deve ser enviado para este teste" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Resultado do teste" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Valor da saída do teste" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Anexo do resultado do teste" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Notas do teste" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Item Primário" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Usar tamanho do pacote ao adicionar: a quantidade definida é o número de pacotes" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Inserir número de série para novos itens" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Itens Filhos" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Preço de compra para este item de estoque, por unidade ou pacote" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Insira o número de itens de estoque para serializar" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Quantidade não deve exceder a quantidade disponível em estoque ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Local de destino do estoque" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Números de série não podem ser atribuídos a esta peça" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Números de série já existem" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Selecione o item de estoque para instalar" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Quantidade a Instalar" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Insira a quantidade de itens a instalar" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Adicionar nota de transação (opcional)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "A quantidade para instalar deve ser pelo menos 1" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Item de estoque indisponível" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "Peça selecionada não está na Lista de Materiais" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "Quantidade a instalar não deve exceder a quantidade disponível" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Local de destino para o item desinstalado" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Selecione peça para converter o item de estoque em" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "Peça selecionada não é uma opção válida para conversão" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Não é possível converter o item de estoque com a Peça de Fornecedor atribuída" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Código de estado do item estoque" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Selecionar itens de estoque para mudar estados" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Nenhum item de estoque selecionado" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Sub-locais" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Parte deve ser comercializável" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "Item é alocado para um pedido de venda" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "Item está alocado a um pedido de produção" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Cliente para atribuir itens de estoque" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "A empresa selecionada não é um cliente" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Nodas atribuídas a estoque" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Uma lista de item de estoque deve ser providenciada" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Notas de fusão de estoque" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Permitir fornecedores divergentes" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permitir a fusão de itens de estoque de fornecedores diferentes" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Permitir estado incompatível" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Permitir a fusão de itens de estoque com estado diferentes" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Ao menos dois itens de estoque devem ser providenciados" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Valor da chave primária do Item Estoque" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Notas da transação de estoque" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Sua conta foi criada." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Por favor, use a função de redefinir senha para acessar" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Bem-vindo(a) ao InvenTree" diff --git a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po index 636acd20b6..de2a050d6c 100644 --- a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API endpoint não encontrado" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "A lista de itens ou filtros devem ser fornecidas para operação em massa" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Os itens devem ser fornecidos como lista" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Lista de itens inválida fornecida" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Filtros devem ser fornecidos como" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Filtros inválidos fornecidos" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Todos os filtros devem ser usados apenas como verdadeiro" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Nenhum item corresponde com os critérios fornecidos" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Nenhum dado fornecido" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Este campo deve ser único." -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "O usuário não tem permissão para visualizar esse modelo" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Não foi possível converter {original} para {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Quantidade inválida" @@ -112,13 +104,13 @@ msgstr "Informe a data" msgid "Invalid decimal value" msgstr "Valor decimal inválido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Observações" @@ -131,75 +123,91 @@ msgstr "O valor '{name}' não aparece no formato padrão" msgid "Provided value does not match required pattern: " msgstr "O valor fornecido não corresponde ao padrão exigido: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Não é possível serializar mais de 1000 itens de uma vez" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Número serial em branco" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Número serial duplicado" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Grupo invalido:{group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Intervalo do grupo {group} excede a quantidade permitida ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Nenhum número de série foi encontrado" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "O número de números seriais únicos ({n}) deve corresponder a quantidade ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Remover as \"tags\" HTML deste valor" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Os dados contêm conteúdo de marcação proibido" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Erro de conexão" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "O servidor respondeu com código de estado inválido" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Ocorreu uma exceção" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "O servidor respondeu com valor inválido do tamanho de conteúdo" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "O download da imagem excedeu seu tamanho máximo" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "O servidor remoto retornou uma resposta vazia" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "A URL fornecida não é um arquivo de imagem válido" @@ -207,11 +215,11 @@ msgstr "A URL fornecida não é um arquivo de imagem válido" msgid "Log in to the app" msgstr "Entrar no aplicativo" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Você deve habilitar a autenticação de dois fatores antes de fazer qualquer coisa." @@ -259,18 +267,18 @@ msgstr "O número de referência é muito longo" msgid "Invalid choice" msgstr "Escolha inválida" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Descrição" msgid "Description (optional)" msgstr "Descrição (opcional)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Caminho" @@ -313,75 +321,66 @@ msgstr "Hash exclusivo de dados de código de barras" msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Falha na Tarefa" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Falha na tarefa de trabalho '{f}' em segundo plano após tentativas {n}" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Erro de servidor" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Um erro foi registrado pelo servidor." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Imagem" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Deve ser um número válido" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Selecione a moeda entre as opções disponíveis" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "Este campo não pode ser nulo." -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Imagem remota" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL do arquivo da imagem remota" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Baixar imagens de URL remota não está habilitado" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Falha ao baixar a imagem da URL remota" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "Formato de conteúdo inválido" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "Tipo de conteúdo não encontrado" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Chinês (simplificado)" msgid "Chinese (Traditional)" msgstr "Chinês (tradicional)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Atualização disponível" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "Uma atualização para o InvenTree está disponível" @@ -553,30 +552,30 @@ msgstr "Unidade física inválida" msgid "Not a valid currency code" msgstr "O código de moeda não é válido" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Situação de pedido" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Produção Progenitora" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Incluir Variáveis" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Incluir Variáveis" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Incluir Variáveis" msgid "Part" msgstr "Parte" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categoria" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Construção de Ancestrais" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Atribuído a mim" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Atribuído a" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Criado antes" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Criado após" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Tem a data inicial" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Data inicial antes" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Data de início após" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Tem data limite" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Data limite antes" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Data limite depois" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Concluído antes" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Concluído após" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Data Mínima" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Data máxima" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Excluir árvore" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "A compilação deve ser cancelada antes de ser excluída" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Consumível" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Opcional" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montagem" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Testável" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Pedido pendente" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Alocado" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponível" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Em pedido" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordem da compilação" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Local" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Saída" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Ordens de Produções" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "O BOM da montagem não foi validado" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Ordem de compilação não pode ser criada para uma parte inativa" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Ordem de compilação não pode ser criado para uma parte desbloqueada" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Criar ordens só pode ser realizado externamente para partes compráveis" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Usuário ou grupo responsável deve ser especificado" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Parte do pedido de compilação não pode ser alterada" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "A data limite deve ser posterior à data inicial" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Referência do pedido de produção" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Referência do pedido de produção" msgid "Reference" msgstr "Referência" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Breve descrição da produção (opcional)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Selecione a peça para construir" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referência do pedido de venda" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Local de Origem" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selecione o local para fazer estoque para esta compilação (deixe em branco para tirar a partir de qualquer local de estoque)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Produção Externa" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Esta ordem de compilação é atendida externamente" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Local de Destino" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Selecione o local onde os itens concluídos serão armazenados" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Quantidade de Produção" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Número de itens em estoque para produzir" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Itens concluídos" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Número de itens em estoque concluídos" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Progresso da produção" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Código do lote" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Código do lote para esta saída de produção" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Criado em" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Data inicial da produção" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Data de início agendada para esta ordem de produção" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Data alvo final" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data limite para finalização de produção. Estará atrasado a partir deste dia." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Data de conclusão" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "concluído por" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Usuário que emitiu esta ordem de produção" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsável" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Usuário ou grupo responsável para esta ordem de produção" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Link Externo" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link para URL externa" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Prioridade de Produção" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioridade desta ordem de compilação" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Código do Projeto" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Código do projeto para esta ordem de compilação" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Não é possível concluir o pedido de produção com pedidos secundários abertos" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Não é possível concluir o pedido com saídas incompletas" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Falha ao descarregar tarefa para concluir alocações de compilação" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "O Pedido de produção {build} foi concluído" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Um pedido de produção foi concluído" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Números de série devem ser fornecidos para peças rastreáveis" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nenhuma saída de produção especificada" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Saída da produção já está concluída" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Saída da produção não corresponde à Ordem de Produção" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "A quantidade não pode ser maior que a quantidade de saída" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "A saída da produção não passou em todos os testes necessários" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "A saída da produção {serial} não passou em todos os testes necessários" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Item da ordem de produção" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Compilar objeto" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Compilar objeto" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Quantidade" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Quantidade necessária para o pedido de produção" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de produção deve especificar a saída, pois peças mestres estão marcadas como rastreáveis" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "O item de estoque selecionado não coincide com linha da BOM" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Quantidade deve ser 1 para estoque serializado" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em estoque ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Item de Estoque" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Origem do item em estoque" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Instalar em" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Destino do Item do Estoque" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Nível de produção" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nome da Peça" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Saída da Produção" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Saída de produção não coincide com a produção progenitora" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Peça de saída não coincide com a peça da ordem de produção" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Esta saída de produção já foi concluída" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Esta saída de produção não está totalmente alocada" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Insira a quantidade para construir a saída de produção" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantidade inteira necessária, pois a lista de materiais contém peças rastreáveis" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Números de Série" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Digite os números de série para saídas de produção" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Local de estoque para saídas de produção" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alocar automaticamente os itens necessários com os números de série correspondentes" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Os seguintes números de série já existem ou são inválidos" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Uma lista de saídas de produção deve ser fornecida" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas eliminadas" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar quaisquer alocações de estoque para saídas eliminadas" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Motivo para eliminar saída(s) de produção" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consumir Estoque Alocado" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consumir qualquer estoque que já tenha sido alocado para esta produção" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Remover Saídas Incompletas" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Aceitar conforme consumido por esta ordem de produção" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar esta ordem de produção" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Como deseja manejar itens de estoque extras atribuídos ao pedido de produção" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrecarregados" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta encomenda" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceitar que o número requerido de saídas de produção não foi concluído" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Quantidade de produção requerida não foi concluída" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "A ordem de produção tem ordens de produção secundárias abertas" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Ordem de produção deve estar no estado de produção" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Ordem de produção tem saídas incompletas" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linha de Produção" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Saída da Produção" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Saída de produção deve indicar a mesma produção" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part deve apontar para a mesma parte que a ordem de produção" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "O item deve estar em estoque" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Saída de produção deve ser definida para alocação de peças rastreadas" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Saída de produção não pode ser definida para alocação de peças não rastreadas" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Alocação de itens precisam ser fornecidos" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Localização do estoque onde as peças devem ser originadas (deixe em branco a partir de qualquer local)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Excluir Local" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Excluir itens de estoque desta localização selecionada" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Estoque Intercambiável" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Itens de estoque em múltiplos locais podem ser intercambiáveis" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Estoque Substituto" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Alocar itens BOM opcionais para ordem de produção" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Falha ao iniciar tarefa de alocação automática" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Referência do BOM" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID da parte BOM" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nome da peça BOM" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Produção" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Fornecedor da Peça" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Referência da produção" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Nome da Categoria" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Herdado" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Item BOM" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Agendado para produção" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Estoque Externo" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Estoque Substituto Disponível" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Estoque de Variantes Disponível" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "Em Espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Concluído" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Estoque obrigatório para a ordem de produção" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Ordem de produção {build} requer estoque adicional" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Ordem de produção vencido" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Ordem de produção {bo} está atrasada" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "É um link" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "O usuário não tem permissão para deletar esses anexos" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "O usuário não tem permissão para deletar esse anexo" @@ -1555,794 +1554,794 @@ msgstr "Sem extensão" msgid "Project Code Label" msgstr "Rótulo de código do projeto" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Atualizado" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Tempo da última atualização" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "Atualizado Por" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "Usuário que atualizou este objeto pela última vez" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Código único do projeto" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Descrição do projeto" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Usuário ou grupo responsável por este projeto" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Chave de configurações" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Valor da Configuração" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Valor escolhido não é uma opção válida" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Valor deve ser um valor booleano" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Valor deve ser um número inteiro" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "O valor deve ser um número válido" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "O valor não passa em verificações de validação" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "A frase senha deve ser diferenciada" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Usuário" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Preço" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Preço unitário na quantidade especificada" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Ponto final" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Ponto final em qual o webhook foi recebido" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Nome para este webhook" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Ativo" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Este webhook está ativo" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Ficha" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Ficha para acesso" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Secreto" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Segredo compartilhado para HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "ID da Mensagem" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Identificador exclusivo desta mensagem" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Servidor" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Servidor do qual esta mensagem foi recebida" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Cabeçalho" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Cabeçalho da mensagem" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Corpo" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Corpo da mensagem" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Ponto do qual esta mensagem foi recebida" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Trabalhado em" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "O trabalho desta mensagem foi concluído?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Id" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Título" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Publicado" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Autor" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Resumo" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Lida" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Esta notícia do item foi lida?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Arquivo de imagem" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "Tipo modelo de destino para esta imagem" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "ID do modelo de destino para esta imagem" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Unidade Personalizada" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "O símbolo da unidade deve ser único" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Nome da unidade deve ser um identificador válido" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Nome da unidade" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Símbolo de unidade opcional" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definição" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Definição de unidade" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Anexo" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Arquivo ausente" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Link externo não encontrado" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Categoria de Modelo" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "Tipo modelo de destino para esta imagem" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Selecione arquivo para anexar" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Comentário" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Comentário de anexo" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Data de envio" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Data em que o arquivo foi enviado" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Tamanho do arquivo" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Tamanho do arquivo em bytes" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Categoria de modelo especificado inválido para anexo" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Status Referência Definido" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Conjunto de status estendido com este estado personalizado" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Chave lógica" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "Chave lógica de estado que é igual a este estado personalizado na lógica de negócios" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "Valor numérico que será salvo no banco de dados dos modelos" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Nome do estado" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que será exibida no frontend" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Cor" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Cor que será exibida no frontend" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Modelo" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "Modelo que este estado está associado a" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Modelo deve ser selecionado" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "A chave deve ser selecionada" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "Chave lógica deve ser selecionada" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "A chave deve diferir da chave lógica" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Uma classe de estado de referência válida deve ser fornecida" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "A chave deve diferir das chaves lógicas do estado de referência" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "A chave lógica deve estar nas chaves lógicas do estado de referência" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "O nome deve diferir dos nomes do estado de referência" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Lista de Seleção" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Listas de Seleção" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Nome da lista de seleção" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Descrição da lista de seleção" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Esta lista de seleção está bloqueada?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Esta lista de seleção pode ser usada?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Extensão de origem" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Extensão que fornece a lista de seleção" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Série de Origem" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Série opcional identificando a fonte usada para esta lista" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Entrada Padrão" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Entrada padrão para esta lista de seleção" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Criado em" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Data e hora em que a lista de seleção foi criada" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Última Atualização" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Data e hora da última atualização da lista de seleção" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Entrada na lista de seleção" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Entradas na Lista de Seleção" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Lista de seleção à qual esta entrada pertence" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Valor da entrada da lista de seleção" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Rótulo para a entrada da lista de seleção" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Descrição da entrada da lista de seleção" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "Esta entrada da lista de seleção está ativa?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Nome do Parâmetro" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Unidades" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Caixa de seleção" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Modelo" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Dados" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Anotação" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Campo opcional de notas" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Escaneamento de Código de Barras" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Dados de código de barras" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Usuário que escaneou o código de barras" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Marcador de hora" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Data e hora da verificação do código de barras" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "O endpoint da URL que processou o código de barras" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Dados de contexto para escanear código de barras" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Resposta" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Dados de resposta da verificação de código de barras" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "O código de barras foi digitalizado com sucesso?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "Ocorreu um erro" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: exclusão de registro de e-mail está protegida. Defina INVENTREE_PROTECT_EMAIL_LOG para Falso para permitir a exclusão." -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "Mensagem de e-mail" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "Mensagens de Email" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "Anunciado" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "Enviado" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "Falhou" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Entregue" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Confirmado" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "Entrada" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "Saída" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Não responder" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "Rastrear Entrega" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "Monitorado" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "Clique no caminho" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "ID Global" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificador para esta mensagem (pode ser fornecido por sistema externo)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "ID do Tópico" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificador deste tópico de mensagem (pode ser fornecido por sistema externo)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "Tópico" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "Tópico vinculado para esta mensagem" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "Tópico do e-mail" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "Tópicos de e-mail" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chave" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "Chave única para este tópico (usada para identificar o tópico)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "Identificador exclusivo deste tópico" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "Iniciado interno" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "Este tópico foi iniciado internamente?" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "Data e hora em que o tópico foi criado" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "Data e hora da última atualização do tópico" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} cancelado" msgid "A order that is assigned to you was canceled" msgstr "Um pedido atribuído a você foi cancelado" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Itens Recebidos" @@ -2392,1235 +2391,1243 @@ msgstr "É indicado se a configuração é substituída por uma variável de amb msgid "Override" msgstr "Substituir" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Está em execução" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Tarefas Pendentes" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tarefas Agendadas" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tarefas com Falhas" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID da Tarefa" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ID Único da Tarefa" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Congelar tempo" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Nome da tarefa" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Função" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Nome da função" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumentos da tarefa" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argumentos de Palavra-chave" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argumentos Palavra-chave da Tarefa" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Nome do arquivo" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Categoria de Modelo" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Usuário não tem permissão para criar ou editar anexos para este modelo" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista de seleção bloqueada" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Sem Grupo" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "URL do site está bloqueada por configuração" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Reinicialização necessária" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Uma configuração que requer uma reinicialização do servidor foi alterada" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migrações pendentes" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Número de migrações pendentes na base de dados" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Códigos de aviso ativos" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Um dicionário dos códigos de aviso ativos" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "ID da instância" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Identificador exclusivo para esta instância do InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Anúncio ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Anuncie a ID da instância do servidor na informação de estado do servidor (não autenticado)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Nome da Instância do Servidor" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Descritor de frases para a instância do servidor" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Usar nome da instância" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Usar o nome da instância na barra de título" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Restringir a exibição 'sobre'" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Mostrar 'sobre' modal apenas para superusuários" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nome da empresa" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Nome interno da Empresa" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "URL de Base" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "URL de base para instância do servidor" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Moeda Padrão" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Selecione a moeda base para cálculos de preços" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Moedas Suportadas" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Lista de códigos de moeda suportados" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Intervalo de Atualização da Moeda" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Com que frequência atualizar as taxas de câmbio (defina como zero para desativar)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "dias" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Extensão de Atualização de Moeda" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Extensão de Atualização de Moeda a utilizar" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Baixar do URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Permitir baixar imagens remotas e arquivos de URL externos" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Limite de tamanho para baixar" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Tamanho máximo permitido para download da imagem remota" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "Usuário-agente utilizado para baixar da URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir a substituição de imagens e arquivos usados baixados por usuário-agente (deixar em branco por padrão)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Validação rigorosa de URL" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Exigir especificação de esquema ao validar URLs" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Atualizar Intervalo de Verificação" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Frequência para verificar atualizações (defina como zero para desativar)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Backup Automático" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Ativar cópia de segurança automática do banco de dados e arquivos de mídia" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Intervalo de Backup Automático" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Especificar o número de dia entre as cópias de segurança" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Intervalo para Excluir da Tarefa" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Os resultados da tarefa no plano de fundo serão excluídos após um número especificado de dias" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Intervalo para Excluir do Registro de Erro" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Registros de erros serão excluídos após um número especificado de dias" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Intervalo para Excluir de Notificação" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Notificações de usuários será excluído após um número especificado de dias" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "Intervalo de Exclusão de e-mail" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "Mensagens de e-mail serão excluídas após um determinado número de dias" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "Proteger o Log de E-mail" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "Evitar exclusão de entradas de registros de e-mail" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Suporte aos códigos de barras" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Ativar suporte a leitor de código de barras na interface web" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Armazenar Resultados do Código de Barras" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Armazenar a verificação do código de barras no banco de dados" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Contagem máxima de códigos de barras" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Número máximo de resultados de digitalização de códigos de barras para armazenar" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Atraso na entrada de código de barras" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Tempo de atraso de processamento de entrada de barras" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Suporte a webcam com código de barras" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir a verificação de códigos de barras via webcam no navegador" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Código de barras Exibir Dados" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Exibir dados do código de barras no navegador como texto" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Extensão de geração de códio de barras" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Extensão para usar para geração de dados de código de barras interno" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Revisões de peças" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Ativar campo de revisão para a Peça" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "Somente Revisão da Assembleia" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "Permitir revisões apenas para peças de montagem" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Permitir a exclusão da Assembleia" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permitir a exclusão de peças que são usadas em uma montagem" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Padrão de expressão regular para correspondência de Parte IPN" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Permitir Duplicação IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que várias peças compartilhem o mesmo IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Permitir Edição IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Permitir trocar o valor do IPN enquanto se edita a peça" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Copiar dados da LDM da Peça" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar dados da LDM por padrão quando duplicar a peça" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Copiar Dados de Parâmetro da Peça" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar dados de parâmetros por padrão quando duplicar uma peça" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Copiar Dados Teste da Peça" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Copiar dados de teste por padrão quando duplicar a peça" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Copiar Parâmetros dos Modelos de Categoria" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Copiar parâmetros do modelo de categoria quando criar uma peça" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Peças são modelos por padrão" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Peças podem ser montadas a partir de outros componentes por padrão" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Componente" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Peças podem ser usadas como sub-componentes por padrão" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Comprável" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Comercializável" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Peças vão vendíveis por padrão" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Peças vão rastreáveis por padrão" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Peças são virtuais por padrão" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Mostrar peças relacionadas" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Exibir peças relacionadas com uma peça" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Dados Iniciais de Estoque" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir a criação do estoque inicial quando adicionar uma nova peça" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Dados Iniciais de Fornecedor" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir a criação de dados iniciais de fornecedor quando adicionar uma nova peça" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Formato de Exibição do Nome da Peça" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Formato para exibir o nome da peça" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Ícone de Categoria de Peça Padrão" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Ícone padrão de categoria de peça (vazio significa sem ícone)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de Casas Decimais do Preço" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mínimo número de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Máximo Casas Decimais de Preço" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Usar Preços do Fornecedor" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir quebras de preço do fornecedor nos cálculos de preços globais" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Substituir Histórico de Compras" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Histórico do pedido de compra substitui os intervalos dos preços do fornecedor" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Usar Preços do Item em Estoque" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar preço inserido manualmente no estoque para cálculos de valores" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Idade do preço do Item em Estoque" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Não incluir itens em estoque mais velhos que este número de dias no cálculo de preços" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Usar Preço Variável" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir preços variáveis nos cálculos de valores gerais" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Apenas Ativar Variáveis" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Apenas usar peças variáveis ativas para calcular preço variáveis" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "Atualização automática dos preços" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "Atualizar automaticamente o preço da peça quando dados internos forem alterados" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Intervalo de Reconstrução de Preços" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Número de dias antes da atualização automática dos preços das peças" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Preços Internos" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Habilitar preços internos para peças" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Substituição de preço interno" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Se disponível, os preços internos substituem os cálculos da faixa de preços" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Habilitar Impressão de Etiqueta" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Ativar impressão de etiqueta pela interface da internet" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "DPI da Imagem na Etiqueta" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolução de DPI quando gerar arquivo de imagens para fornecer à extensão de impressão de etiquetas" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Ativar Relatórios" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Ativar geração de relatórios" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Modo de depuração" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Gerar relatórios em modo de depuração (saída HTML)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Registro de erros" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Registrar erros que ocorrem ao gerar relatórios" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Tamanho da página" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Tamanho padrão da página PDF para relatórios" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Forçar Unidades de Parâmetro" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Se as unidades são fornecidas, os valores do parâmetro devem corresponder às unidades especificadas" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Seriais Únicos Globais" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Números de série para itens de estoque devem ser globalmente únicos" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Excluir Estoque Esgotado" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina o comportamento padrão, quando um item de estoque é esgotado" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Modelo de Código de Lote" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Modelo para gerar códigos de lote padrão para itens de estoque" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Validade do Estoque" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Ativar função de validade de estoque" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Vender estoque expirado" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Permitir venda de estoque expirado" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Tempo de Estoque Inativo" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de dias em que os itens em estoque são considerados obsoleto antes de vencer" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Produzir Estoque Vencido" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Permitir produção com estoque vencido" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Controle de propriedade do estoque" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Ativar controle de propriedade sobre locais e itens de estoque" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Ícone padrão do local de estoque" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Ícone padrão de local de estoque (vazio significa sem ícone)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Mostrar Itens de Estoque Instalados" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Exibir itens de estoque instalados nas tabelas de estoque" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Verificar LDM ao instalar itens" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Itens do estoque instalado devem existir na LDM para a parte principal" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Permitir Fora de Transferência" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que os itens que não estão em estoque sejam transferidos entre locais de estoque" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Produção" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Produção" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Exigir proprietário responsável" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Um proprietário responsável deve ser atribuído a cada pedido" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Requer Parte Ativa" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Impedir a criação de ordem para partes inativas" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Exigir parte bloqueada" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Impedir criação de pedidos para peças desbloqueadas" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "Exigir validade, BOM" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Impedir criação de pedido de compilação a menos que LDM tenha sido validada" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "Exigir pedidos secundários fechados" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Impedir o preenchimento do pedido de construção até que todos os pedidos secundários sejam fechados" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "Pedido de Produção Externo" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "Ativar funcionalidade de pedido de construção externa" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Bloquear Até Passagem de Testes" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Impedir que as saídas da produção sejam concluídas até que todos os testes necessários passem" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Ativar Pedidos de Devolução" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Ativar funcionalidade de pedido de devolução na interface do usuário" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Devolução" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Devolução" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Editar os Pedidos de Devolução Concluídos" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir a edição de pedidos de devolução após serem enviados ou concluídos" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Venda" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Venda" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Envio Padrão de Pedidos de Venda" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar criação de envio padrão com Pedidos de Vendas" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Editar os Pedidos de Vendas concluídos" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de vendas após serem enviados ou concluídos" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Marcar pedidos enviados como concluídos" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Pedidos de vendas marcados como enviados automaticamente serão concluídos, ignorando o status \"enviado\"" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Compras" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Compra" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Editar Pedidos de Compra Concluídos" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de compras após serem enviados ou concluídos" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Converter Moeda" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "Converter valor de item para moeda base quando receber o estoque" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Completar automaticamente os pedidos de Compra" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automaticamente os pedidos de compra como concluídos quando todos os itens de linha forem recebidos" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Ativar senha esquecida" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Ativar a função \"Esqueci minha senha\" nas páginas de acesso" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Ativar cadastro" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Ativar auto-registro para usuários na página de entrada" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Ativar SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Ativar SSO na página de acesso" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Ativar registro SSO" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Ativar auto-registro via SSO para usuários nas páginas de login" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "Ativar sincronização de grupo SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Ativar sincronização de grupos do InvenTree com grupos fornecidos pelo IdP" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "Chave de grupo SSO" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "O nome dos grupos reivindicam o atributo fornecido pelo IdP" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "Mapa do grupo SSO" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Um mapeamento de grupos de SSO para grupos locais de InvenTree. Se o grupo local não existir, será criado." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Remover grupos fora do SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Se os grupos atribuídos ao usuário devem ser removidos somente se eles não são o backend pelo IdP. Pois, essa configuração desabilitada pode causar problemas de segurança" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Email obrigatório" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Exigir do usuário o e-mail no cadastro" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Auto-preencher usuários SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Preencher automaticamente os detalhes do usuário a partir de dados da conta SSO" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Enviar email duplo" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Ao se registrar, peça aos usuários duas vezes por seus e-mails" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Senha duas vezes" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "No registro pedir aos usuários duas vezes pela senha" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Domínios permitidos" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir registros a certos domínios (separados por vírgula, começando com @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Grupo no cadastro" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupo ao qual novos usuários serão atribuídos ao registro. Se a sincronização de grupo SSO estiver ativada, este grupo só estará definido se nenhum grupo puder ser atribuído a partir do IdP." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Forçar AMF" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Os usuários devem usar uma segurança multifatorial." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Verificar extensões na inicialização" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Checar que todas as extensões instaladas no início — ativar em ambientes de contêineres" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Verificar por atualizações de extensão" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Ativar verificações periódicas de atualizações para a extensão instalados" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Ativar integração URL" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Ativar extensão para adicionar rotas URL" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Ativar integração de navegação" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Ativar extensões para integrar à navegação" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Ativar integração com aplicativo" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Ativar extensões para adicionar aplicativos" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Ativar integração com agendas" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Ativar extensões para executar tarefas agendadas" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Ativar integração de eventos" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Ativar extensões para responder a eventos internos" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Ativar integração de interface" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Ativar extensões para integrar na interface do usuário" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "Ativar integração com o e-mail" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Ativar extensão para processar e-mails de saída/entrada" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "Ativar códigos de projeto" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Ativar códigos de projeto para rastrear projetos" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "Ativar funcionalidade para gravação de níveis e valor de estoque históricos" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Excluir Locais Externos" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Período de contagem automática" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Exibir nomes completos dos usuários" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Exibir nomes completos dos usuários em vez de nomes de usuários" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "Exibir Perfis de Usuário" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "Exibir Perfis de Usuários em sua página de perfil" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Ativar Dados da Estação de Teste" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Ativar coleção de dados da estação de teste para resultados de teste" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "A peça está ativa" msgid "Manufacturer is Active" msgstr "Fabricante está ativo" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "A peça do Fornecedor está ativa" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "A peça interna está ativa" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "O fornecedor está Ativo" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Tem estoque" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Empresas" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Descrição da empresa" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Descrição da empresa" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Página Web" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "URL do Site da empresa" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Número de telefone" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Número de telefone do contato" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Endereço de e-mail do contato" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contato" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Ponto de contato" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link para informações externas da empresa" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Esta empresa está ativa?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "É um cliente" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Você vende itens para esta empresa?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "É fornecedor" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Você compra itens desta empresa?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "É fabricante" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Esta empresa fabrica peças?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Moeda padrão utilizada para esta empresa" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "CNPJ" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "CNPJ da empresa" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Endereço" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Endereços" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Selecione a Empresa" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Título do endereço" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Título descrevendo a entrada do endereço" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Endereço Principal" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Definir como endereço principal" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Linha 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Linha de endereço 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Linha 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Linha de endereço 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "CEP" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Cidade/Região" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Cidade CEP / região" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Estado/Provincia" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Estado ou Província" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "País" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "País do endereço" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notas de envio por correio" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notas para o envio da transportadora" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Notas de envio interno" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notas de envio para uso interno" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Fabricante da peça" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Peça base" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Selecionar peça" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "NPF" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Número de Peça do Fabricante" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL do link externo da peça do fabricante" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Descrição da peça do fabricante" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Unidades de pacote devem ser compatíveis com as unidades de peça base" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Unidades de pacote devem ser maior que zero" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fornecedor" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Esta parte de fornecedor está ativa?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Selecionar peça do fabricante" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL do link externo da peça do fabricante" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "preço base" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Embalagem" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Embalagem de peças" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Quantidade de embalagens" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantidade total fornecida em um único pacote. Deixe em branco para itens individuais." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "múltiplo" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Pedido múltiplo" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Quantidade disponível do fornecedor" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilidade Atualizada" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Data da última atualização de dados disponíveis" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Parcelamento de Preço do Fornecedor" @@ -4316,7 +4323,7 @@ msgstr "Moeda padrão utilizada para este fornecedor" msgid "Company Name" msgstr "Nome da Empresa" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Em Estoque" @@ -4452,7 +4459,7 @@ msgstr "O campo não existe no modelo de destino" msgid "Selected field is read-only" msgstr "O campo selecionado é somente leitura" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Importar Sessão" @@ -4464,31 +4471,31 @@ msgstr "Campo" msgid "Column" msgstr "Coluna" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Índice de fileira" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Dados da linha original" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Erros" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Válido" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "Número de cópias para cada rótulo" msgid "Connected" msgstr "Conectado" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Desconhecido" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Referência do Pedido" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Pendente" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Tem código do projeto" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Criado por" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Criado Antes" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Criado Após" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "Tem Data Inicial" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "Data Inicial Antes" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "Data Inicial Após" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "Tem Data Prevista" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Data Prevista Antes" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Data Prevista Antes" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Tem Preço" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Concluído Antes" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Concluído Após" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "Pedido de Produção Vencido" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Pedido" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Pedido Completo" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Peça Interna" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Pedido pendente" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Concluído" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Possui Envio" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Pedido de Compra" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Pedido de Compra" msgid "Sales Order" msgstr "Pedido de Venda" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Preço Total" msgid "Total price for this order" msgstr "Preço total deste pedido" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Moeda do Pedido" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Moeda para este pedido (deixe em branco para usar o padrão da empresa)" @@ -4851,718 +4870,742 @@ msgstr "Moeda para este pedido (deixe em branco para usar o padrão da empresa)" msgid "This order is locked and cannot be modified" msgstr "Este pedido está bloqueado e não pode ser modificado" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "O contato não corresponde à empresa selecionada" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Data inicial deve ser anterior à data limite" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Descrição do pedido (opcional)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Selecione o código do projeto para este pedido" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Link para página externa" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Data inicial" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Data de início programada para esta encomenda" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data Prevista" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Data esperada para entrega do pedido. O Pedido estará atrasado após esta data." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Data de emissão" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Dia que o pedido foi feito" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Usuário ou grupo responsável para este pedido" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Ponto de contato para este pedido" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Endereço da empresa para este pedido" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Referência do pedido" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Situação" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Estado do pedido" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Empresa da qual os itens estão sendo encomendados" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Referencia do fornecedor" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Código de referência do pedido fornecedor" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "recebido por" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Dia que o pedido foi concluído" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Destino" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Destino para os itens recebidos" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Fornecedor de peça deve corresponder a fornecedor da OC" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Quantidade deve ser um número positivo" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Empresa para qual os itens foi vendidos" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Situação do Pedido de Venda" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Referência do Cliente " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Código de Referência do pedido do cliente" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Data de envio" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "O pedido já está completo" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "O pedido já está cancelado" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Apenas um pedido aberto pode ser marcado como completo" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Pedido não pode ser concluído, pois, há envios incompletos" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "O pedido não pode ser concluído, pois, há alocações incompletas" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "O pedido não pode ser concluído, pois, há itens de linha incompletos" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "O pedido está bloqueado e não pode ser modificado" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Quantidade do item" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Referência do Item em Linha" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Observações do Item de Linha" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Data limite para este item de linha (deixe em branco para usar a data limite do pedido)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Descrição do item de linha (opcional)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Contexto adicional para esta linha" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Preço Unitário" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "Item de linha de pedido de compra" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "A peça do fornecedor deve corresponder ao fornecedor" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "Pedido de produção deve ser marcada como externa" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "Os pedidos de produção só podem ser vinculados a partes de montagem" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "Criar parte do pedido deve combinar a parte do item de linha" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Fornecedor da Peça" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Recebido" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Preço de Compra" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Preço unitário de compra" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "Pedido de produção externa para ser preenchida por este item de linha" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "Linha Extra do Pedido de Compra" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "Item de Linha de Pedido de Vendas" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Apenas peças vendáveis podem ser atribuídas a um pedido de venda" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Preço de Venda" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Preço de venda unitário" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Quantidade enviada" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "Envio do Pedido de Venda" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Data do envio" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Data de Entrega" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Data da entrega do envio" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Verificado por" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Usuário que verificou este envio" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envio" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Número do Envio" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Número de rastreio" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Informação de rastreamento" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Quantidade alocada deve ser maior que zero" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Linha" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Item" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Copiar linhas" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplicar Pedido" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "ID do pedido inválido" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "O pedido não pode ser cancelado" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Mesclar Itens" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Número Interno da Peça" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Nome Interno da Peça" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Código de barras já está em uso" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Itens Alocados" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Os seguintes números de série não estão disponíveis" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "Rejeitado" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "Categoria da Peça" msgid "Part Categories" msgstr "Categorias de Peça" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Local Padrão" @@ -5778,7 +5821,7 @@ msgstr "Palavras-chave padrão para peças nesta categoria" msgid "Icon" msgstr "Ícone" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ícone (opcional)" @@ -5799,7 +5842,7 @@ msgstr "Valor Padrão" msgid "Default Parameter Value" msgstr "Valor Padrão do Parâmetro" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Peças" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Nome da peça" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "É um modelo" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Descrição da peça (opcional)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Palavras-chaves" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Validade Padrão" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Validade (em dias) para itens do estoque desta peça" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Estoque Mínimo" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Criação de Usuário" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Data" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Modelos de teste só podem ser criados para partes testáveis" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Obrigatório" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Estoque Inicial" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Ignorar Linhas Inválidas" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Habilite essa opção para ignorar linhas inválidas" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "Expirou {abs(days_diff)} dias atrás" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} dias" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "Total" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Estoque mínimo" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Estoque máximo" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Responsável" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Selecionar Responsável" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "Sobrenome do usuário" msgid "Email address of the user" msgstr "Endereço de e-mail do usuário" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Superusuário" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "Somente um superusuário pode ajustar este campo" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "Senha" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "Senha do usuário" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "Você não tem permissão para criar usuários" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Sua conta foi criada." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Bem-vindo(a) ao InvenTree" diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po index c6befeaa17..a8ba07025c 100644 --- a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "Criteriul API final nu a fost găsit" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Lista articolelor sau filtrelor trebuie să fie prevăzută pentru operaţiune în vrac" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Articolele trebuie să fie furnizate ca o listă" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Listă de articole nevalidă furnizată" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Filtrele trebuie furnizate ca dicționar" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Filtre furnizate nevalide" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Toate filtrele trebuie folosite doar cu adevărat" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Niciun articol nu corespunde criteriilor furnizate" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Nu sunt furnizate date" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Acest câmp trebuie să fie unic." -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Utilizatorul nu are permisiunea de a vedea acest model" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nu s-a putut converti {original} în {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Cantitate furnizata nevalida" @@ -112,13 +104,13 @@ msgstr "Enter Date" msgid "Invalid decimal value" msgstr "Valoare zecimală nevalidă" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Notițe" @@ -131,75 +123,91 @@ msgstr "Valoarea '{name}' nu apare în formatul modelului" msgid "Provided value does not match required pattern: " msgstr "Valoarea furnizată nu se potrivește cu modelul necesar: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Nu se pot serializa mai mult de 1000 de elemente odată" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Golire șir de numere de serie" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Număr de serie duplicat" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Grup nevalid: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Interval de grup {group} depășește cantitatea permisă ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Niciun număr de serie găsit" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Numărul unic de numere de serie ({n}) trebuie să corespundă cu cantitatea ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Elimină tag-urile HTML din această valoare" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Datele conţin conţinut de marcaje interzis" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Eroare de conexiune" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Serverul a răspuns cu un cod de stare invalid" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Excepție apărută" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Serverul a răspuns cu o valoare de Content-Length invalidă" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Dimensiunea imaginii este prea mare" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Descărcarea imaginii a depăşit dimensiunea maximă" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Serverul la distanță a returnat un răspuns gol" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "URL-ul furnizat nu este un fișier imagine valid" @@ -207,11 +215,11 @@ msgstr "URL-ul furnizat nu este un fișier imagine valid" msgid "Log in to the app" msgstr "Conectați-vă la aplicație" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Trebuie să activați autentificarea cu doi factori înainte de a face orice altceva." @@ -259,18 +267,18 @@ msgstr "Numărul de referință este prea mare" msgid "Invalid choice" msgstr "Alegere invalidă" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nume" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Descriere" msgid "Description (optional)" msgstr "Descriere (opțional)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Cale" @@ -313,75 +321,66 @@ msgstr "Hash unic al codului de bare" msgid "Existing barcode found" msgstr "Cod de bare existent găsit" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Eroare sarcină" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Sarcina lucrătorului de fundal '{f}' a eșuat după {n} încercări" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Eroare de server" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "A fost înregistrată o eroare de către server." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Imagine" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Trebuie sa fie un număr valid" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Monedă" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Selectați moneda din opțiunile disponibile" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "Acest câmp nu poate fi null." -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Valoare invalidă" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Imagini de la distanţă" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL-ul imaginii la distanţă" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Descărcarea imaginilor din URL-ul de la distanţă nu este activată" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Descărcarea imaginii din URL-ul de la distanță a eșuat" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "Format de tip de conținut nevalid" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "Tipul de conținut nu a fost găsit" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "Tipul de conținut nu se potrivește cu mixin necesar clasei" @@ -537,11 +536,11 @@ msgstr "Chineză (simplificată)" msgid "Chinese (Traditional)" msgstr "Chineză (tradițională)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Actualizare disponibilă" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "O actualizare pentru InvenTree este disponibilă" @@ -553,30 +552,30 @@ msgstr "Unitate fizică nevalidă" msgid "Not a valid currency code" msgstr "Nu este un cod valutar valid" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Starea comenzii" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Construcție părinte" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "İnclude variante" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "İnclude variante" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "İnclude variante" msgid "Part" msgstr "Piesă" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categorie" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Ancestor Build" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Alocate mie" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Atribuit către" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Creat înainte de" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Creat după" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Are data de începere" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Data de început înainte de" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Data de incepere după" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Are dată țintă" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Data de început înainte de" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Data de incepere după" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Finalizat înainte de" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Finalizat după" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Dată min" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Dată maximă" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Exclude arbore" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Construcția trebuie anulată înainte de a putea fi ștearsă" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Opţional" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Asamblate" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Urmarit" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Testabilă" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Comandă restantă" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Alocate" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Consumat" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponibil" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Pe comandă" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Comenzi de Producție" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Locatie" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Ieșire" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filtrează după ID-ul elementelor de ieșire din stoc. Utilizați \"null\" pentru a găsi elemente de construcție dezinstalate." @@ -748,41 +751,41 @@ msgstr "Filtrează după ID-ul elementelor de ieșire din stoc. Utilizați \"nul msgid "Build Orders" msgstr "Comenzi de Producție" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "BOM-ul nu a fost validată" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Comandă de producție nu poate fi creată pentru piesa inactiva" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Comandă de producție nu poate fi creată pentru piesa deblocată" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Comenzile de producție pot fi îndeplinite extern doar pentru piesele achiziționabile" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Utilizator sau grup responsabil trebuie specificat" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Piesa din comanda de producție nu poate fi schimbata" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Data țintă trebuie să fie după data de început" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Referință comandă producție" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Referință comandă producție" msgid "Reference" msgstr "Referinţă" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Scurtă descriere a construcției (opțional)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" -msgstr "" +msgstr "Comanda de producție pentru care această construcție este alocată" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Selectează piesa pentru construit" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referință comandă de vânzare" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" -msgstr "" +msgstr "Comanda de vânzare pentru care această construcție este alocată" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Locație sursă" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selectați locația de unde se va prelua stocul pentru această producție (lăsați câmpul necompletat pentru a prelua stocul din orice locație)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Construcție externă" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Această comandă de producție este îndeplinită extern" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Locul destinației" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Selectaţi locaţia unde vor fi stocate elementele complete" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Cantitatea construirii" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Numărul de articole de stoc pentru producție" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Articole finalizate" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Numărul de articole din stoc care au fost finalizate" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Stare producției" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Cod status producție" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Cod lot" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Cod de lot pentru această producție" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Data creării" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Data începerii construcției" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Data de început programată pentru această comandă de construcție" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Data finalizării țintă" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" +msgstr "Data țintă pentru finalizarea construcției. Construcția va fi depășită după această dată." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" -msgstr "" +msgstr "Data completării" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" -msgstr "" +msgstr "finalizat până la" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" -msgstr "" +msgstr "Emis de" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" -msgstr "" +msgstr "Utilizatorul care a emis această comandă de producție" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" -msgstr "" +msgstr "Responsabil" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" -msgstr "" +msgstr "Utilizatorul sau grupul responsabil pentru această comandă de producție" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" -msgstr "" +msgstr "Link extern" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" -msgstr "" - -#: build/models.py:421 -msgid "Build Priority" -msgstr "" +msgstr "Link către URL-ul extern" #: build/models.py:424 -msgid "Priority of this build order" -msgstr "" +msgid "Build Priority" +msgstr "Prioritate de construire" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:427 +msgid "Priority of this build order" +msgstr "Prioritatea acestei comenzi de producție" + +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Cod proiect" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Cod de proiect pentru această comandă de construcție" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Nu se poate finaliza construcția comenzii cu versiuni deschise" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Nu se poate completa comanda de producție cu rezultate incomplete" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" -msgstr "" +msgstr "Nu s-a putut descărca sarcina pentru a finaliza alocarea construcției" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "" +msgstr "A fost finalizată o comandă de producție {build}" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" -msgstr "" +msgstr "A fost finalizată o comandă de producție" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" -msgstr "" +msgstr "Numerele de serie trebuie furnizate pentru piesele urmăribile" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" -msgstr "" - -#: build/models.py:1016 -msgid "Build output is already completed" -msgstr "" +msgstr "Nu este specificată nicio ieșire de producție" #: build/models.py:1019 +msgid "Build output is already completed" +msgstr "Construcția este deja finalizată" + +#: build/models.py:1022 msgid "Build output does not match Build Order" -msgstr "" +msgstr "Construcția nu se potrivește cu Comanda de producție" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" -msgstr "" +msgstr "Cantitatea trebuie să fie mai mare decât zero" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" -msgstr "" +msgstr "Cantitatea nu poate fi mai mare decât cantitatea de ieşire" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" -msgstr "" +msgstr "Construcția nu a trecut toate testele necesare" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" -msgstr "" +msgstr "Construcția {serial} nu a trecut toate testele necesare" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" -msgstr "" +msgstr "Stocurile alocate sunt încă în producţie" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" -msgstr "" +msgstr "Nu se poate finaliza parțial o construcție cu elemente alocate" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" -msgstr "" +msgstr "Element linie comandă de producție" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" -msgstr "" +msgstr "Construiește obiectul" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" -msgstr "" +msgstr "Cantitate" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" -msgstr "" +msgstr "Cantitatea necesară pentru comanda de producție" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" -msgstr "" +msgstr "Cantitatea de stoc consumată" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "" +msgstr "Articolul contruit trebuie să specifice o ieșire de construcție, deoarece piesa principală este marcată ca urmăribilă." -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" -msgstr "" +msgstr "Articolul din stoc selectat nu se potrivește cu linia BOM" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" -msgstr "" +msgstr "Cantitatea alocată trebuie să fie mai mare decât zero" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" -msgstr "" +msgstr "Cantitatea trebuie sa fie 1 pentru stoc serializat" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "" +msgstr "Cantitate alocata ({q}) nu trebuie sa depaseasca cantitatea disponibila de stoc ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" -msgstr "" +msgstr "Articolul din stoc este supra alocat" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" -msgstr "" +msgstr "Articol Stoc" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" -msgstr "" +msgstr "Locație articol stoc" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" -msgstr "" +msgstr "Cantitatea de stoc alocată pentru construcție" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" -msgstr "" +msgstr "Instalează în" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" -msgstr "" +msgstr "Destinație articol in stoc" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" -msgstr "" +msgstr "Nivel de construcție" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" -msgstr "" +msgstr "Numele Piesei" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" -msgstr "" +msgstr "Rezultat de construcție" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" -msgstr "" +msgstr "Producția nu corespunde cu producția-mamă" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" -msgstr "" +msgstr "Componenta de ieșire nu corespunde componentei din comanda de producție" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" -msgstr "" +msgstr "Această producție este deja finalizată" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" -msgstr "" +msgstr "Această producție nu este alocată integral" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" -msgstr "" +msgstr "Introduceți cantitatea pentru producția de ieșire" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" -msgstr "" +msgstr "Număr de serie" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" -msgstr "" +msgstr "Nu este permisă" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" -msgstr "" +msgstr "Acceptați nealocat" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" -msgstr "" +msgstr "Acceptați Incomplet" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" -msgstr "" +msgstr "Linie de construcție" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" -msgstr "" +msgstr "Rezultatul construirii" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "" +msgstr "Locația stocului de unde vor fi procurate piesele (lăsați necompletat pentru a prelua piesele din orice locație)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" -msgstr "" +msgstr "Nume piesă BOM" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" -msgstr "" +msgstr "Producție" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" -msgstr "" +msgstr "Nume Categorie Piesă" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" -msgstr "" +msgstr "În Producţie" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" -msgstr "" +msgstr "Stoc extern" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" -msgstr "" +msgstr "Stoc disponibil" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" -msgstr "" +msgstr "Stoc de înlocuire disponibil" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1479,59 +1478,59 @@ msgstr "" #: generic/states/tests.py:131 order/status_codes.py:12 #: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102 msgid "Pending" -msgstr "" +msgstr "În așteptare" #: build/status_codes.py:12 msgid "Production" -msgstr "" +msgstr "Producție" #: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51 #: order/status_codes.py:81 msgid "On Hold" -msgstr "" +msgstr "Suspendat" #: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53 #: order/status_codes.py:84 msgid "Cancelled" -msgstr "" +msgstr "Anulat" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" -msgstr "" +msgstr "Finalizat" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" -msgstr "" +msgstr "Comandă de producție restantă" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" -msgstr "" +msgstr "Comanda de producție {bo} este în întârziere" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1553,796 +1552,796 @@ msgstr "" #: common/filters.py:351 msgid "Project Code Label" -msgstr "" +msgstr "Etichetă Cod Proiect" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" -msgstr "" +msgstr "Descrierea proiectului" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" -msgstr "" +msgstr "Utilizatorul sau grupul responsabil pentru acest proiect" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" -msgstr "" +msgstr "Valoarea nu trece verificările de validare" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" -msgstr "" +msgstr "Utilizator" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" -msgstr "" +msgstr "Preț" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" -msgstr "" +msgstr "Preț unitar la cantitatea specificată" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" -msgstr "" +msgstr "Punct final" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" -msgstr "" +msgstr "Punctul final la care acest webhook este primit" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" -msgstr "" +msgstr "Nume pentru acest webhook" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" -msgstr "" +msgstr "Activ" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" -msgstr "" +msgstr "Este acest webhook activ" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" -msgstr "" +msgstr "Token-ul" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" -msgstr "" +msgstr "Token pentru acces" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" -msgstr "" +msgstr "Secret" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" -msgstr "" +msgstr "Host" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" -msgstr "" +msgstr "Host de la care acest mesaj a fost primit" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" -msgstr "" +msgstr "Id-ul" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" -msgstr "" +msgstr "Titlu" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" -msgstr "" - -#: common/models.py:1745 -msgid "Published" -msgstr "" - -#: common/models.py:1747 -msgid "Author" -msgstr "" - -#: common/models.py:1749 -msgid "Summary" -msgstr "" - -#: common/models.py:1752 common/models.py:3026 -msgid "Read" -msgstr "" +msgstr "Link" #: common/models.py:1752 +msgid "Published" +msgstr "Publicată" + +#: common/models.py:1754 +msgid "Author" +msgstr "Autor" + +#: common/models.py:1756 +msgid "Summary" +msgstr "Rezumat" + +#: common/models.py:1759 common/models.py:3033 +msgid "Read" +msgstr "Citit" + +#: common/models.py:1759 msgid "Was this news item read?" -msgstr "" +msgstr "A fost citită această știre?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" -msgstr "" +msgstr "Fișier imagine" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" -msgstr "" +msgstr "Unitate personalizată" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" -msgstr "" - -#: common/models.py:1859 -msgid "Unit name" -msgstr "" +msgstr "Numele unității trebuie să fie un identificator valid" #: common/models.py:1866 +msgid "Unit name" +msgstr "Numele unității" + +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" -msgstr "" +msgstr "Comentariu" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" -msgstr "" +msgstr "Comentariu atașament" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" -msgstr "" +msgstr "Data încărcării" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" -msgstr "" +msgstr "Numele statului" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" -msgstr "" +msgstr "Descrierea listei de selecție" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" -msgstr "" +msgstr "Descrierea parametrului" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" -msgstr "" +msgstr "Numele acțiunii" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" -msgstr "" +msgstr "Nume funcție" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" -msgstr "" +msgstr "Nume fișier" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" -msgstr "" +msgstr "Nume Instanţă Server" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 -msgid "Use instance name" -msgstr "" - #: common/setting/system.py:227 +msgid "Use instance name" +msgstr "Utilizaţi numele instanţei" + +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" -msgstr "" +msgstr "Denumire companie" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 -msgid "Part Revisions" -msgstr "" - #: common/setting/system.py:407 +msgid "Part Revisions" +msgstr "Versiune Componente" + +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" -msgstr "" +msgstr "Șablon Cod lot" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" -msgstr "" +msgstr "Șablon pentru generarea codurilor de lot implicite pentru elementele de stoc" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" -msgstr "" +msgstr "Necesită Titularul Responsabil" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" -msgstr "" +msgstr "Titularul responsabil trebuie să fie atribuit fiecărei comenzi" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "Comenzi externe de producție" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" -msgstr "" +msgstr "Blochează până la trecerea testelor" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" +msgstr "Previne ca ieșirile de construcție să fie finalizate până când toate testele necesare trec" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" +msgstr "Comenzile de vânzare marcate ca expediate vor fi finalizate automat, ocolind starea \"expediate\"" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" -msgstr "" +msgstr "Activează parola uitată" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" -msgstr "" +msgstr "Activare parolă uitată funcție pe paginile de autentificare" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" -msgstr "" +msgstr "Parola de două ori" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" -msgstr "" +msgstr "La înscriere, cere de două ori parola lor" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Afișează numele complet al utilizatorilor în loc de nume de utilizator" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 -msgid "Company description" -msgstr "" - #: company/models.py:153 -msgid "Description of the company" -msgstr "" +msgid "Company description" +msgstr "Descrierea Companiei" -#: company/models.py:159 +#: company/models.py:154 +msgid "Description of the company" +msgstr "Descrierea companiei" + +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" -msgstr "" +msgstr "Descrierea piesei de la producător" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" -msgstr "" +msgstr "Descrierea piesei furnizorului" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" -msgstr "" +msgstr "Id comandă" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" -msgstr "" +msgstr "Descrierea comenzii (opțional)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 -msgid "User or group responsible for this order" +msgid "Updated At" msgstr "" -#: order/models.py:517 +#: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "Utilizatorul sau grupul responsabil pentru această comandă de producție" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" -msgstr "" +msgstr "Descrierea elementului de rând (opțional)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" -msgstr "" +msgstr "Introduceți codul lotului pentru articolele din stoc primite" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" -msgstr "" +msgstr "Este versiune" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" -msgstr "" +msgstr "Are Versiuni" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" -msgstr "" +msgstr "Descrierea piesei (opțional)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" -msgstr "" +msgstr "Versiunea" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" -msgstr "" +msgstr "Este aceasta parte o versiune a unei alte părți?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" -msgstr "" +msgstr "Versiune Din" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" -msgstr "" +msgstr "Responsabil pentru acest capitol" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" -msgstr "" +msgstr "Descriere test" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" -msgstr "" +msgstr "Introduceți descrierea pentru acest test" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" -msgstr "" +msgstr "Este necesar acest test pentru a trece?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" -msgstr "" +msgstr "Versiunea" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" -msgstr "" +msgstr "Descrierea piesei" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7061,7 +7101,7 @@ msgstr "" #: plugin/base/ui/serializers.py:49 msgid "Feature Description" -msgstr "" +msgstr "Descrierea funcției" #: plugin/base/ui/serializers.py:54 msgid "Feature Icon" @@ -7154,7 +7194,7 @@ msgstr "" #: plugin/builtin/events/auto_issue_orders.py:32 msgid "Automatically issue build orders on the assigned target date" -msgstr "" +msgstr "Eliberarea automată a comenzilor de producție la data țintă atribuită" #: plugin/builtin/events/auto_issue_orders.py:38 msgid "Auto Issue Purchase Orders" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -7978,11 +8031,11 @@ msgstr "" #: report/models.py:223 msgid "Template description" -msgstr "" +msgstr "Descrierea șablonului" #: report/models.py:229 msgid "Revision number (auto-increments)" -msgstr "" +msgstr "Număr versiune (creșteri automate)" #: report/models.py:235 msgid "Attach to Model on Print" @@ -8087,7 +8140,7 @@ msgstr "" #: report/models.py:816 msgid "Snippet file description" -msgstr "" +msgstr "Descrierea detaliată a fișierului" #: report/models.py:834 msgid "Asset" @@ -8099,7 +8152,7 @@ msgstr "" #: report/models.py:842 msgid "Asset file description" -msgstr "" +msgstr "Descriere fișier Asset" #: report/serializers.py:95 msgid "Select report template" @@ -8161,7 +8214,7 @@ msgstr "" #: report/templates/report/inventree_build_order_report.html:152 msgid "Issued By" -msgstr "" +msgstr "Emis de" #: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8202,7 +8255,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:47 #: templates/email/stale_stock_notification.html:20 msgid "Batch" -msgstr "" +msgstr "Lot" #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" @@ -8215,14 +8268,14 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_stock_report_merge.html:111 #: report/templates/report/inventree_test_report.html:167 msgid "Serial" -msgstr "" +msgstr "Serie" #: report/templates/report/inventree_test_report.html:97 msgid "Test Results" @@ -8234,7 +8287,7 @@ msgstr "" #: report/templates/report/inventree_test_report.html:129 msgid "Pass" -msgstr "" +msgstr "Ok" #: report/templates/report/inventree_test_report.html:131 msgid "Fail" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" -msgstr "" +msgstr "Proprietar" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,280 +8546,280 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" -msgstr "" +msgstr "Codul lotului pentru acest element din stoc" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" #: stock/serializers.py:85 msgid "Generated batch code" -msgstr "" +msgstr "Cod lot generat" #: stock/serializers.py:94 msgid "Select build order" @@ -8762,15 +8827,15 @@ msgstr "" #: stock/serializers.py:103 msgid "Select stock item to generate batch code for" -msgstr "" +msgstr "Selectați articolul din stoc pentru a genera codul de lot" #: stock/serializers.py:112 msgid "Select location to generate batch code for" -msgstr "" +msgstr "Selectaţi locaţia pentru a genera codul de lot pentru" #: stock/serializers.py:121 msgid "Select part to generate batch code for" -msgstr "" +msgstr "Selectați articolul pentru a genera codul de lot pentru" #: stock/serializers.py:130 msgid "Select purchase order" @@ -8778,7 +8843,7 @@ msgstr "" #: stock/serializers.py:137 msgid "Enter quantity for batch code" -msgstr "" +msgstr "Introduceți cantitatea pentru codul de lot" #: stock/serializers.py:163 msgid "Generated serial number" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" -msgstr "" +msgstr "Parolă" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" -msgstr "" +msgstr "Parolă pentru utilizator" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" +msgstr "Suprascrie avertismentul cu privire la regulile parolei" + +#: users/serializers.py:410 +msgid "Staff" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" -msgstr "" +msgstr "Vă rugăm să utilizați funcția de resetare a parolei pentru a vă autentifica" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po index f1a52a50c8..300b2d22d6 100644 --- a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "Конечная точка API не обнаружена" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Список элементов или фильтров должен быть указан для массовых операций" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Элементы должны быть представлены в виде списка" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Предоставлен недопустимый список элементов" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Фильтры должны быть предоставлены в виде словаря" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Не верные фильтры" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Все фильтры будут использоваться с параметром True" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Нет элементов, соответствующих заданным критериям" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Данные не предоставлены" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Поле должно быть уникальным." -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "У пользователя недостаточно прав для просмотра этой модели!" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Невозможно преобразовать {original} в {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "недопустимое количество" @@ -112,13 +104,13 @@ msgstr "Введите дату" msgid "Invalid decimal value" msgstr "Не верное десятичное значение" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Заметки" @@ -131,75 +123,91 @@ msgstr "Значение '{name}' отсутствует в формате ша msgid "Provided value does not match required pattern: " msgstr "Предоставленное значение не соответствует требуемому формату: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Одновременно можно сериализовать только 1000 элементов" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Пустая строка серийного номера" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Повторяющийся серийный номер" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Недопустимая группа: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Диапазон группы {group} превышает допустимое количество ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Серийных номеров не найдено" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Количество уникальных серийных номеров ({n}) должно быть равно ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Удалить HTML теги из этого значения" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Данные содержат недопустимую разметку" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Ошибка соединения" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Сервер ответил неверным кодом статуса" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Произошло исключение" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Сервер ответил неверным значением Контент-Длина" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Изображение слишком большое" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Загрузка изображения превышен максимальный размер" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Удаленный сервер вернул пустой ответ" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Предоставленный URL не является допустимым файлом изображения" @@ -207,11 +215,11 @@ msgstr "Предоставленный URL не является допусти msgid "Log in to the app" msgstr "Войти в приложение" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Электронная почта" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Вы должны включить двухфакторную аутентификацию, прежде чем делать что-нибудь еще." @@ -259,18 +267,18 @@ msgstr "Номер ссылки слишком большой" msgid "Invalid choice" msgstr "Неверный выбор" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Название" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Описание" msgid "Description (optional)" msgstr "Описание (необязательно)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Путь" @@ -313,75 +321,66 @@ msgstr "Уникальный хэш данных штрих-кода" msgid "Existing barcode found" msgstr "Обнаружен существующий штрих-код" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Задача не удалась" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Фоновый процесс '{f}' после {n} попыток завершился с ошибкой" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Ошибка сервера" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Сервер зарегистрировал ошибку." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Изображение" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Должно быть действительным номером" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Валюта" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Выберите валюту из доступных вариантов" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "Это поле не может быть пустым." -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Неверное значение" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Удаленное изображение" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "ССЫЛКА файла изображения на удаленном сервере" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Загрузка изображений с удаленного URL-адреса не включена" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Не удалось загрузить изображение из URL адреса" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "Неверный формат типа содержимого" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "Тип содержимого не найден" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "Тип содержимого не соответствует требуемому классу миксина" @@ -537,11 +536,11 @@ msgstr "Китайский (Упрощенный)" msgid "Chinese (Traditional)" msgstr "Китайский (Традиционный)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Доступно обновление" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "Доступно обновление для InvenTree" @@ -553,30 +552,30 @@ msgstr "Неверная физическая единица" msgid "Not a valid currency code" msgstr "Неверный код валюты" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Статус заказа" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Родительский заказ на производство" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Включая варианты" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Включая варианты" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Включая варианты" msgid "Part" msgstr "Деталь" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Категория" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Родительская сборка" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Назначено мне" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Назначено" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Создано до" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Создано после" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Есть дата начала" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Дата начала до" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Дата начала после" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Есть целевая дата" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Целевая дата до" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Целевая дата после" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Завершено до" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Завершено после" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "Минимальная дата" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Максимальная дата" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Исключить дерево" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Заказ на производство должен быть отменен перед удалением" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Расходник" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Необязательно" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Сборная деталь" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Отслеживается" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Тестируемая" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Невыполненные заказы" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Зарезервировано" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Потреблено" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Доступно" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "В заказе" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Заказ на производство" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Расположение" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Выход" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Фильтрация по идентификатору исходящей складской позиции. Используйте 'null', чтобы найти несмонтированные элементы сборки." @@ -748,41 +751,41 @@ msgstr "Фильтрация по идентификатору исходяще msgid "Build Orders" msgstr "Заказы на производство" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Сборка BOM не подтверждена" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Порядок сборки не может быть создан для неактивной части" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Порядок сборки не может быть создан для разблокированной части" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Заказ на сборку может быть помечен сторонним только для покупных деталей" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Должен быть указан ответственный пользователь или группа" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Деталь заказа на производства не может быть изменена" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Целевая дата должна быть после даты начала" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Ссылка на заказ на производство" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Ссылка на заказ на производство" msgid "Reference" msgstr "Номер" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Краткое описание заказа на производство (необязательно)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "Заказ на производство, которому принадлежит этот заказ на производство" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Выберите деталь для производства" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Ссылка на заказ" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "Заказ на продажу, которому принадлежит этот заказ на производство" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Место хранения комплектующих" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Выберите место хранения для этого заказа на производство (оставьте пустым, чтобы взять с любого места на складе)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Сторонняя сборка" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Этот заказ на сборку выполнен сторонней компанией" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Место хранения результата" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Выберите место хранения завершенных элементов" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Количество производимых деталей" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Количество складских позиций для производства" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Произведенные детали" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Количество складских позиций, которые были произведены" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Статус заказа на производство" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Код статуса заказа на производство" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Код партии" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Код партии для продукции" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Дата создания" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Дата начала сборки" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Запланированная начальная дата этого заказа на сборку" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Целевая дата завершения" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Целевая дата для заказа на производства. Заказ будет просрочен после этой даты." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Дата завершения" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "выполнено" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Создано" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Пользователь, создавший этот заказ на производство" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ответственный" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Пользователь, ответственный за этот заказ на производство" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Внешняя ссылка" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Ссылка на внешний URL" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Приоритет производства" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Приоритет этого заказа на производство" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Код проекта" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Код проекта для этого заказа на производство" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Невозможно завершить заказ на сборку при наличии открытых дочерних сборок" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Невозможно завершить заказ на сборку при незавершенных выходах" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Не удалось выгрузить задачу для распределения на сборку" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Заказ на производство {build} был завершен" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Заказ на производство был завершен" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Для отслеживаемых деталей должны быть указаны серийные номера" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Продукция не указана" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Продукция уже произведена" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Продукция не совпадает с заказом на производство" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Количество не может быть больше количества продукции" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "Выход сборки не прошёл все необходимые тесты" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Сборка {serial} не прошла все необходимые тесты" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "Выделенные на складе товары все еще находятся в производстве" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Невозможно частично завершить выход сборки с распределёнными элементами" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Номер позиции для производства" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Объект производства" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Объект производства" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Количество" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Требуемое количество для заказа на производство" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Количество израсходованного запаса" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Элемент производства должен указать продукцию, как главную деталь помеченную как отслеживаемая" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Выбранная складская позиция не соответствует позиции в BOM" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Количество должно быть 1 для сериализованных запасов" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Складская позиция перераспределена" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Складская позиция" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Исходная складская позиция" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Количество на складе для производства" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Установить в" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Целевая складская позиция" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Уровень сборки" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Наименование детали" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Выход Продукции" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Продукция не совпадает с родительским заказом на производство" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Продукция не соответствует детали заказа на производство" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Эта продукция уже помечена как завершенная" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Сырье для этой продукции не полностью зарезервировано" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Введите количество продукции" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Требуется целое количество, так как материал содержит отслеживаемые детали" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Серийные номера" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Введите серийные номера для продукции" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Местоположение склада для результата сборки" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Автоматически выделить серийные номера" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Следующие серийные номера уже существуют или недействительны" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Необходимо представить список выхода деталей" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Место хранения для списанной продукции" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Отменить резервирование" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Отменить все резервы запасов для списанной продукции" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Причина списания продукции" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Место хранения для завершенной продукции" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Разрешить неполное резервирование" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Завершить продукцию, даже если остатки не были полностью зарезервированы" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Израсходовать зарезервированные остатки" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Израсходовать складские позиции, которые были зарезервированы для этой продукции" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Удалить незавершенную продукцию" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Удалить всю незавершенную продукцию" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Запрещено" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Принять как поглощенный этим заказом на производство" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Отменить резерв, до завершения заказа на производство" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Перераспределенные запасы" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Как вы хотите обработать дополнительные складские позиции, назначенные для заказа на производство" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Некоторые складские позиции были перераспределены" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Разрешить не полное резервирование" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Подтвердите, что складские позиции не были полностью зарезервированы для этого заказа на производство" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Необходимые запасы не были полностью зарезервированы" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Разрешить незавершенные производимые детали" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Допустить, что требуемое кол-во продукции не завершено" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Требуемое количество деталей не было произведено" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Производственный заказ имеет незавершённые дочерние заказы" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Заказ на производство должен быть в стадии выполнения" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Заказ на производство имеет незавершенную продукцию" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Позиция для производства" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Выход продукции" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Продукция должна указывать на тот же производство" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Позиция для производства" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part должна указывать на ту же часть, что и заказ на производство" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Элемент должен быть в наличии" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Продукция должна быть указан для резервирования отслеживаемых частей" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Необходимо указать резервируемые элементы" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Место хранения, где будут зарезервированы детали (оставьте пустым, чтобы забрать их из любого места)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Исключить место хранения" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Исключить складские позиции из этого выбранного места хранения" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Обменный остаток" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Складские позиции в нескольких местах могут использоваться на взаимозаменяемой основе" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Заменить остатки" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Разрешить резервирование замещающих деталей" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Необязательные элементы" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Зарезервировать необязательные позиции BOM для заказа на производство" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Не удалось запустить задачу автораспределения" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Ссылка на спецификацию (BOM)" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID детали в спецификации (BOM)" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Название детали в спецификации (BOM)" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "Установить в" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Сборка" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Деталь поставщика" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Зарезервированное количество" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Ссылка на сборку" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Название категории детали" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Отслеживание" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Унаследованные" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Есть варианты" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Позиция BOM" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "В производстве" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Запланировано к сборке" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Внешний склад" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Доступный запас" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Доступный запас заменителей" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Доступный запас вариантов" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Потреблённое количество превышает выделенное количество" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Дополнительные примечания по расходу запаса" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "Элемент сборки должен ссылаться на правильный заказ на сборку" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Дублирование выделения элемента сборки" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "Строка сборки должна ссылаться на правильный заказ на сборку" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Дублирование выделения строки сборки" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Должен быть указан хотя бы один элемент или строка" @@ -1495,43 +1494,43 @@ msgstr "Отложен" msgid "Cancelled" msgstr "Отменён" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Завершён" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Необходимый запас для заказа на производство" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Заказ на сборку {build} требует дополнительный запас" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Просроченный заказ сборки" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Заказ на производство {bo} просрочен" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "Ссылка" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "Файл" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "У пользователя нет прав для удаления этих вложений" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "У пользователя нет прав на удаление этого вложения" @@ -1555,794 +1554,794 @@ msgstr "Нет плагина" msgid "Project Code Label" msgstr "Название кода проекта" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Обновлено" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Временная метка последнего обновления" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "Обновлено" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "Пользователь, последний раз обновивший этот объект" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Уникальный код проекта" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Описание проекта" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Пользователь или группа, ответственные за этот проект" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Ключ настроек" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Значения настроек" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Выбранное значение не является допустимым" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Значение должно быть булевым" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Значение должно быть целым числом" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Значение должно быть допустимым числом" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "Значение не прошло проверку" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Строка ключа должна быть уникальной" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Пользователь" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Скидка распространяется на заданное количество" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Цена" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Цена за единицу для указанного количества" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Конечная точка" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Конечная точка, на которой принимается этот веб-хук" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Имя для этого веб-хука" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Активный" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Этот веб-хук активен?" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Токен" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Токен для доступа" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Секрет" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Общий ключ для HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "ID Сообщения" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Уникальный идентификатор этого сообщения" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Хост" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Хост, с которого было получено это сообщение" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Заголовок" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Заголовок этого сообщения" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Тело" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Текст этого сообщения" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Конечная точка, на которую было получено это сообщение" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Работал над" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Работа над этим сообщением завершена?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Код" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Заголовок" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Ссылка" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Опубликовано" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Автор" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Итого" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Читать" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Эта новость была прочитана?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Файл изображения" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "Тип целевой модели для этого изображения" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "ID целевой модели для этого изображения" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Пользовательская единица измерения" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Символ единицы должен быть уникальным" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Имя единицы должно быть действительным идентификатором" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Название единицы" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Символ" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Обозначение единицы измерения (необязательно)" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Определение" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Определение единицы измерения" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Вложения" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Файл не найден" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Отсутствует внешняя ссылка" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Тип модели" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "Тип целевой модели для изображения" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Выберите файл для вложения" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Комментарий" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Описание вложения" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Дата загрузки" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Дата загрузки файла" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Размер файла" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Размер файла в байтах" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Указан недопустимый тип модели для вложения" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Пользовательское состояние" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Пользовательские состояния" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Группа статусов" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Группа статусов, которая будет дополнена пользовательским состоянием" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Логическое состояние" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "Логическое состояние, соответствующее пользовательскому состоянию в бизнес-логике" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Значение" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "Числовое значение, которое будет сохранено в базе данных" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Название состояния" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Метка" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Метка, которая будет отображаться на фронтенде" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Цвет" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Цвет отображения в интерфейсе" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Модель" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "Модель, с которой связано это состояние" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Необходимо выбрать модель" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "Необходимо выбрать ключ" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "Логическое состояние должно быть выбрано" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "Ключ должен отличаться от логического ключа" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Должен быть указан корректный класс ссылочного статуса" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "Состояние должно отличаться от других логических состояний выбранного статуса" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "Логическое состояние должно быть из множества логических состояний выбранного статуса" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "Имя должно отличаться от имен эталонного статуса" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Список выбора" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Списки выбора" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Название списка выбора" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Описание списка выбора" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Заблокирована" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Этот список выбора заблокирован?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Можно ли использовать этот список выбора?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Исходный плагин" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Плагин, который предоставляет список выбора" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Исходная строка" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Необязательная строка, определяющая источник, используемый для этого списка" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Запись по умолчанию" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Вариант по умолчанию для этого списка выбора" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Создано" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Дата и время создания списка выбора" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Последнее обновление" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Дата и время последнего обновления списка выбора" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Вариант списка выбора" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Варианты списка выбора" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Список выбора, к которому относится данный вариант" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Значение варианта списка выбора" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Метка для элемента списка выбора" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Описание варианта списка выбора" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "Активен ли варианта списка выбора?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Шаблон параметра" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "Шаблоны параметров" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "У параметров-переключателей не может быть единицы измерения" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "У параметров-переключателей не может быть вариантов" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Варианты должны быть уникальными" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Имя шаблона параметров должно быть уникальным" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "Тип целевой модели для этого шаблона параметра" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Название параметра" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Единица измерения" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Физическая единица этого параметра" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Описание параметра" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Переключатель" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Этот параметр является переключателем?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Варианты" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Возможные варианты этого параметра (разделить запятой)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "Список выбора для этого параметра" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Включено" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "Включен ли этот шаблон параметра?" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "Параметр" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "Параметры" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Недопустимое значение параметра" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "Указан неверный тип модели для параметра" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "ID модели" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "ID целевой модели для этого параметра" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Шаблон" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "Шаблон параметра" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Данные" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Значение параметра" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Заметка" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Опциональное поле записей" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Сканирование штрихкодов" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Данные штрихкода" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Пользователь, который сканировал штрих-код" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Метка времени" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Дата и время сканирования штрих-кода" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "URL-адрес, обработавший штрихкод" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Контекст" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Контекстные данные для сканирования штрих-кода" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Ответ" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Данные ответа от сканирования штрихкода" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Результат" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "Сканирование штрихкода было успешным?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "Произошла ошибка" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Удаление журнала электронной почты защищено. Установите INVENTREE_PROTECT_EMAIL_LOG в False, чтобы разрешить удаление." -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "Сообщение электронной почты" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "Сообщения электронной почты" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "Объявлено" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "Отправлено" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "Неудача" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Доставлено" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Подтверждено" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "Входящее" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "Исходящее" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Без ответа" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "Отслеживать доставку" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "Отслеживать прочтение" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "Отслеживать клики" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "Глобальный идентификатор" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "Идентификатор этого сообщения (может быть предоставлен внешней системой)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "ID цепочки" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Идентификатор темы этого сообщения (может быть предоставлен внешней системой)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "Цепочка" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "Связанная цепочка для этого сообщения" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "Приоритет" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "Цепочка электронной почты" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "Цепочки электронной почты" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Ключ" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "Уникальный ключ для этой цепочки (используется для идентификации цепочки)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "Уникальный идентификатор этой цепочки" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "Запущено внутренне" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "Эта цепочка была начата внутри?" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "Дата и время создания цепочки" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "Дата и время последнего обновления цепочки" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} отменен" msgid "A order that is assigned to you was canceled" msgstr "Заказ, назначенный вам, был отменён" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Полученные элементы" @@ -2392,1235 +2391,1243 @@ msgstr "Указывает, переопределена ли настройка msgid "Override" msgstr "Переопределить" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Запущен" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Ожидающие задачи" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Запланированные задания" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Невыполненные Задачи" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "Код задачи" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Уникальный ID задачи" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Заблокировать" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Время блокировки" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Название задачи" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Функция" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Имя функции" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Аргументы" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Аргументы задачи" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Именованные аргументы" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Именованные аргументы задачи" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Имя файла" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Тип модели" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Пользователь не имеет разрешения создавать или редактировать вложения для этой модели" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "У пользователя нет разрешения на создание или редактирование параметров для этой модели" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Список выбора заблокирован" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Нет группы" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "URL сайта заблокирован настройками" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Требуется перезапуск" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Настройки были изменены, что требует перезапуска сервера" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Ожидаемые миграции" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Количество ожидаемых миграций базы данных" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Активные коды предупреждений" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Словарь активных кодов предупреждений" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "Идентификатор экземпляра" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Уникальный идентификатор для этого экземпляра InvenTree" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "ID объявления" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Сообщить ID экземпляра сервера в информации о состоянии сервера (без аутентификации)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Название сервера" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Текстовое описание сервера" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Название инстанса" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Имя сервера в заголовке" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Ограничить отображение `О...`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Показать `О...` только суперпользователям" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Название компании" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Внутреннее название компании" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Базовая ссылка" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Базовая ссылка для экземпляра сервера" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Валюта по умолчанию" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Выберите базовую валюту для расчета цены" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Поддерживаемые валюты" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Список поддерживаемых кодов валют" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Интервал обновления курса валют" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Как часто обновлять курс валют (установите \"ноль\", чтобы выключить)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "дней" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Плагин обновления валют" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Модуль обновления валюты" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Скачать по ссылке" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Разрешить загрузку удаленных изображений и файлов по внешнему URL" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Ограничение размера загрузки" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Максимально допустимый размер загрузки для удалённого изображения" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "User-Agent, используемый для загрузки из URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Позволяет переопределить user-Agent, используемый для загрузки изображений и файлов с внешнего URL (оставьте пустым по умолчанию)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Строгая проверка URL-адреса" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Требуется спецификация схемы при проверке URL-адресов" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Интервал проверки обновлений" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Как часто проверять наличие обновлений (установите ноль чтобы выключить)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Автоматическое резервное копирование" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Включить автоматическое резервное копирование базы данных и медиа-файлов" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Интервал резервного копирования" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Укажите количество дней между событиями автоматического резервного копирования" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Интервал удаления задачи" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Результаты фоновых задач будут удалены после указанного количества дней" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Интервал удаления журнала ошибок" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Журналы ошибок будут удалены после указанного количества дней" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Интервал удаления уведомления" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Уведомления пользователя будут удалены после указанного количества дней" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "Интервал удаления электронной почты" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "Сообщения электронной почты будут удалены через указанное количество дней" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "Защитить журнал электронной почты" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "Предотвращать удаление записей журнала электронной почты" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Поддержка штрих-кодов" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Включить поддержку сканера штрих-кодов в веб-интерфейсе" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Сохранять результаты сканирования штрихкодов" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Сохранять результаты сканирования штрихкодов в базе данных" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Максимальное количество сохранённых сканирований штрихкодов" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Максимальное число результатов сканирования штрихкодов для хранения" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Задержка сканирования штрих-кода" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Время задержки обработки штрих-кода" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Поддержка веб-камер штрих-кодов" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Разрешить сканирование штрих-кода через веб-камеру в браузере" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Показать данные штрих-кода" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Отображать данные штрих-кода в браузере в виде текста" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Плагин генерации штрих-кода" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Плагин для использования внутренней генерации данных штрих-кодов" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Ревизия детали" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Включить поле ревизии для элемента" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "Только ревизия сборки" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "Разрешить ревизии только для сборочных деталей" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Разрешить удаление из заказа" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Разрешить удаление частей, которые используются в заказе" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "Регулярное выражение IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Шаблон регулярного выражения для сопоставления IPN детали" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Разрешить повторяющиеся IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Разрешить нескольким элементам использовать один и тот же IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Разрешить редактирование IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Разрешить изменение значения IPN при редактировании детали" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Скопировать данные BOM детали" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Копировать данные BOM по умолчанию при дублировании детали" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Скопировать данные параметров детали" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Копировать данных параметров по умолчанию при дублировании детали" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Скопировать данные тестирования детали" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Копировать данные тестирования по умолчанию при дублировании детали" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Скопировать параметры по шаблону категории" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Копировать параметры по шаблону категории при создании детали" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "По умолчанию детали являются шаблонами" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "По умолчанию детали могут быть собраны из других компонентов" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Компонент" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "По умолчанию детали могут использоваться в качестве суб-компонентов" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Можно купить" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Можно продавать" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Детали продаются по умолчанию" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Виртуальная" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Детали являются виртуальными по умолчанию" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Показывать связанные детали" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Отображать связанные детали для элемента" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Начальные данные о запасах" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Разрешить создание начального запаса при добавлении новой детали" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Исходные данные о поставщике" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Разрешить создание исходных данных о поставщике при добавлении новой детали" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Формат отображения детали" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Формат для отображения имени детали" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Значок раздела по умолчанию" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Значок категории по умолчанию (пустой означает отсутствие значка)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Минимальные Цены Десятичные Значки" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Макс. Цены десятичные знаки" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Использовать цены поставщика" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Изменить историю покупки" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Ценообразование по историческим заказам на поставку отменяет различия в ценах поставщиков" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Использовать цены из складских позиций" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Использовать расценки из ручного ввода данных о запасах для расчета цен" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Возраст цен складских позиций" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Исключить складские позиции старше указанного количества дней с расчёта цен" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Использовать варианты цен" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Только Активные Варианты" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Использовать только активные запчасти для расчета стоимости варианта" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "Автоматическое обновление цен" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "Автоматически обновлять цены деталей при изменении внутренних данных" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Интервал пересчета цен" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Количество дней до автоматического обновления цены" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Внутренние цены" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Разрешить внутренние цены для частей" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Переопределение внутренней цены" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "При наличии внутренних цен переопределить ценовой диапазон" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Включить печать этикеток" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Включить печать этикеток из веб-интерфейса" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "Изображение меток DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Разрешение DPI при создании файлов изображений для печати этикеток плагинов" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Включить отчеты" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Включить генерацию отчетов" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Режим отладки" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Генерировать отчеты в режиме отладки (вывод HTML)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Журнал ошибок отчета" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Журнал ошибок, которые возникают при создании отчетов" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Размер страницы" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Размер страницы по умолчанию для PDF отчетов" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Принудительное применение единиц измерения параметров" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Если введены единицы, значения параметра должны соответствовать указанным единицам измерения" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Глобально уникальные серийные номера" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Серийные номера для складских позиций должны быть уникальными глобально" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Удалить исчерпанный запас" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Определяет поведение по умолчанию, когда складская позиция заканчивается" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Код партии Шаблона" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Шаблон для создания кодов партии по умолчанию для складских позиций" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Срок годности Запасов" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Включить функцию истечения срока годности" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Использовать просроченные остатки в производстве" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Разрешить продажу просроченных запасов" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Время Залежалости Запасов" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Количество дней перед тем как складская единица будет считаться просроченной" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Использовать просроченные остатки в производстве" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Разрешить использовать просроченные остатки в производстве" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Контроль за собственными запасами" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Разрешить владельцу контролировать расположение складов и номенклатуры" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Значок местоположения по умолчанию" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Значок местоположения склада по умолчанию (пустой означает отсутствие значка)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Показать установленные складские позиции" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Отображать установленные складские позиции в складских таблицах" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Проверять спецификацию при установке изделий" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Установленные единица хранения должны присутствовать в спецификации для родительской детали" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Разрешить передачу товара, отсутствующего на складе" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Разрешить перемещение товаров, которых нет на складе, между складами" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Паттерн ссылки заказа на производство" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Поле требуемого паттерна для создания ссылки заказа на производство" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Требуется ответственный владелец" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Ответственный владелец должен быть назначен для каждого заказа" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Требовать активную деталь" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Запрещать создание заказов на сборку для неактивных деталей" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Требовать заблокированную деталь" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Запрещать создание заказов на сборку для разблокированных деталей" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "Требовать валидную спецификацию" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Запрещать создание заказов на сборку, пока спецификация не будет подтверждена" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "Требовать закрытия дочерних заказов" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Запрещать завершение заказа на сборку, пока не закрыты все дочерние заказы" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "Сторонний заказ на сборку" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "Включить функциональность сторонних заказов на сборку" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Блокировать до прохождения тестов" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Запретить вывод сборки до тех пор, пока не пройдут все необходимые тесты" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Включить заказы на возврат" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Включите функцию заказа на возврат в пользовательском интерфейсе" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Шаблон заказа на возврат товара" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Необходимый шаблон для создания поля «Возврат заказа»" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Редактировать завершенные возвратные заказы" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Разрешить редактирование возвращенных заказов после их завершения" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Шаблон заказа на возврат товара" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Необходимый шаблон для создания поля «Возврат заказа»" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Отгрузка по умолчанию для заказа на продажу" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Включить создание отгрузки по умолчанию для заказов на продажу" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Редактирование завершённых заказов на продажу" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Разрешить редактирование заказов на продажу после их отправки или завершения" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "Отгрузка требует проверки" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "Запрещать завершение отгрузок, пока товары не проверены" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Отмечать отправленные заказы как завершённые" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Заказы на продажу, помеченные как отгруженные, будут автоматически завершены, минуя статус 'отгружено'" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Шаблон ссылки заказа на закупку" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Требуемый шаблон для генерации поля ссылки заказа на закупку" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Редактировать завершённые заказы на закупку" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Разрешить редактирование заказов после их отправки или завершения" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Конвертировать валюту" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "Преобразовывать стоимость товара в базовую валюту при поступлении на склад" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Автоматически выполнять заказы на закупку" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Автоматически отмечать заказы на закупку как завершённые при получении всех позиций" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Включить функцию восстановления пароля" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Включить функцию восстановления пароля на странице входа" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Разрешить регистрацию" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Включить самостоятельную регистрацию пользователей на странице входа" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Включить SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Включить SSO на странице входа" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Включить регистрацию через SSO" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Включить самостоятельную регистрацию пользователей через SSO на странице входа" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "Включить синхронизацию групп через SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Включить синхронизацию групп InvenTree с группами, предоставляемыми IdP" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "Ключ группы SSO" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Имя атрибута группы, предоставленного провайдером идентификации" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "Отображение групп SSO" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Отображение от групп SSO к локальным группам InvenTree. Если локальная группа не существует, она будет создана." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Удалять группы вне SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Удалять ли группы, назначенные пользователю, если они не поддерживаются провайдером идентификации. Отключение этой настройки может привести к проблемам безопасности" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Необходимо указать EMail" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Требовать электронную почту при регистрации" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Автозаполнение пользователей SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Автоматически заполнять данные пользователя из аккаунта SSO" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Написать дважды" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "При регистрации дважды спрашивать адрес электронной почты" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Пароль дважды" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "При регистрации запросить пароль у пользователей дважды" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Разрешенные домены" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Ограничить регистрацию определёнными доменами (через запятую, начиная с @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Группа при новой регистрации" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Группа, на которую назначаются новые пользователи при регистрации. Если включена синхронизация группы SSO, эта группа задается только в том случае, если ни одна группа не может быть назначена через IdP." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Принудительное MFA" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Пользователи должны использовать многофакторную безопасность." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Включение этой настройки потребует от всех пользователей настройки многофакторной аутентификации. Все сессии будут отключены немедленно." -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Проверять плагины при запуске" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Проверять, что все плагины установлены при запуске — включать в контейнерных средах" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Проверка обновлений плагинов" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Включить периодическую проверку обновлений установленных плагинов" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Включить интеграцию URL" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Разрешить плагинам добавлять маршруты URL" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Включить интеграцию навигации" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Разрешить плагинам интегрироваться в навигацию" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Включить интеграцию приложений" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Разрешить плагинам добавлять приложения" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Включить интеграцию расписаний" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Разрешить плагинам запускать запланированные задачи" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Включить интеграцию событий" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Разрешить плагинам реагировать на внутренние события" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Включить интеграцию интерфейса" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Разрешить плагинам интегрироваться в пользовательский интерфейс" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "Включить интеграцию почты" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Разрешить плагинам обрабатывать исходящую и входящую почту" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "Включить коды проекта" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Включить коды проекта для отслеживания проектов" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "Включить инвентаризацию" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "Включить функцию записи истории уровней и стоимости запасов" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Исключить сторонний склад" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Исключить из инвентаризации единицы хранения на внешних складах" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Автоматический период инвентаризации" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "Кол-во дней между автоматических записей инвентаризации" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "Удалять устаревшие записи инвентаризаций" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "Удалять записи инвентаризаций старше N дней" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "Частота удаления записей инвентаризаций" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "Записи инвентаризации будут удалены после N дней" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "Удалять старые записи истории запасов" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "Удалять записи истории запасов старше указанного количества дней" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "Интервал удаления истории запасов" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "Записи истории запасов будут удалены через указанное количество дней" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Показывать полные имена пользователей" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Отображать полные имена пользователей вместо логинов" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "Отображать профили пользователей" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "Отображать профили пользователей на их странице профиля" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Добавлять данные об испытательном оборудовании" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Добавлять данные об испытательном оборудовании в результаты тестирования" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "Включить пинг машин" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Включить периодическую задачу пинга зарегистрированных машин для проверки их статуса" @@ -3965,346 +3972,346 @@ msgstr "Деталь активна" msgid "Manufacturer is Active" msgstr "Производитель активен" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "Поставляемая деталь активна" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "Внутренняя деталь активна" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "Поставщик активен" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Производитель" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Компания" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Есть запас" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Компании" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Описание компании" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Описание компании" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Сайт" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Сайт компании" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Телефон" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Контактный телефон" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Электронная почта контакта" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Контакт" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Контактное лицо" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Ссылка на описание компании" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Эта компания активна?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Покупатель" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Является ли компания покупателем?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Поставщик" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Является ли компания поставщиком деталей?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Производитель" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Является ли компания производителем деталей?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Для этой компании используется валюта по умолчанию" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "Налоговый идентификатор" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "Налоговый идентификатор компании" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Адрес" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Адреса" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Выберите компанию" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Заголовок адреса" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Заголовок, описывающий запись адреса" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Основной адрес" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Указать основным адресом" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Строка 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Адресная строка 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Строка 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Адресная строка 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Почтовый индекс" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Город/Регион" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Почтовый индекс, город/регион" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Регион/Область" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Штат или провинция" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Страна" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Страна адреса" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Записи отправления" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Записи для курьера" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Внутренние записи отправления" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Записи отправления для внутреннего пользования" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Ссылка на адресную информацию (внешняя)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Производитель детали" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Базовая деталь" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Выберите деталь" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Выберите производителя" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "Артикул производителя" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Артикул производителя" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "Ссылка на сайт производителя" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Описание детали производителя" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Единицы измерения упаковки должны быть совместимы с единицами базовой детали" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Единицы упаковки должны быть больше нуля" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Связанная деталь производителя должна ссылаться на ту же базовую деталь" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Поставщик" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Выберите поставщика" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Артикул поставщика" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Является ли эта поставляемая деталь активной?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Выберите производителя части" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "Ссылка на сайт поставщика" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Описание детали поставщика" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "базовая стоимость" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Минимальная плата (например, складская)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Упаковка" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Упаковка детали" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Количество в упаковке" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Общее количество, поставляемое в одной упаковке. Оставьте пустым для отдельных элементов." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "множественные" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Кратность заказа" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Количество, доступное у поставщика" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Доступность обновлена" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Дата последнего обновления данных о доступности" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Ценовой порог поставщика" @@ -4316,7 +4323,7 @@ msgstr "Валюта по умолчанию для этого поставщи msgid "Company Name" msgstr "Название компании" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "На складе" @@ -4452,7 +4459,7 @@ msgstr "Поле не существует в целевой модели" msgid "Selected field is read-only" msgstr "Выбранное поле доступно только для чтения" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Сессия импорта" @@ -4464,31 +4471,31 @@ msgstr "Поле" msgid "Column" msgstr "Колонка" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Номер строки" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Исходные данные строки" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Ошибки" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Корректный" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "Для обновления существующих записей требуется ID." -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Запись с указанным ID не найдена" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Указан недействительный формат ID" @@ -4588,7 +4595,7 @@ msgstr "Количество копий для печати каждой эти msgid "Connected" msgstr "Подключен" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Неизвестно" @@ -4716,105 +4723,117 @@ msgstr "Максимальный прогресс" msgid "Maximum value for progress type, required if type=progress" msgstr "Максимальное значение для типа прогресса, требуется, если тип=progress" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Ссылка на заказ" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Невыполненный" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Есть код проекта" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Создал" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Создано до" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Создано после" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "Есть дата начала" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "Дата начала до" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "Дата начала после" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "Есть целевая дата" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Целевая дата до" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Целевая дата после" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Имеет цену" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Завершено до" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Завершено после" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "Сторонний заказ на сборку" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Заказ" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Заказ выполнен" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Внутренняя деталь" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Заказ в ожидании" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Завершённые" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Есть отгрузка" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Заказ на закупку" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Заказ на закупку" msgid "Sales Order" msgstr "Заказ на продажу" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Общая стоимость" msgid "Total price for this order" msgstr "Общая стоимость этого заказа" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Валюта заказа" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Валюта заказа (оставьте пустым для использования валюты по умолчанию для компании)" @@ -4851,718 +4870,742 @@ msgstr "Валюта заказа (оставьте пустым для испо msgid "This order is locked and cannot be modified" msgstr "Этот заказ заблокирован и не может быть изменён" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Контакт не соответствует выбранной компании" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Дата начала должна быть до целевой даты" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "Адрес не соответствует выбранной компании" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Описание заказа (дополнительно)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Выберите код проекта для этого заказа" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Ссылка на внешнюю страницу" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Начальная дата" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Запланированная начальная дата этого заказа" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Целевая дата" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Ожидаемая дата доставки заказа. После этой даты заказ будет считаться просроченным." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Дата создания" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Дата выдачи заказа" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Пользователь или группа, ответственная за этот заказ" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Контактное лицо по данному заказу" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Адрес компании по этому заказу" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Ссылка на заказ" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Статус" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Статус заказа на закупку" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Компания, в которой детали заказываются" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Номер у поставщика" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Номер заказа у поставщика" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "получил" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Дата завершения заказа" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Место хранения" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Место хранения для полученных позиций" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Поставщик детали должен совпадать с поставщиком заказа на закупку" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Позиция не соответствует заказу на закупку" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "В позиции отсутствует связанная деталь" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Количество должно быть положительным числом" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Покупатель" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Компания, которой детали продаются" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Статус заказа на продажу" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Ссылка клиента" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Код ссылки на заказ клиента" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Дата отгрузки" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "Отправлено" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "Заказ уже выполнен" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "Заказ уже отменен" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Только открытый заказ может быть отмечен как завершённый" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Заказ не может быть завершён, так как есть незавершённые отгрузки" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Заказ не может быть завершён, так как есть незавершённые распределения" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "Заказ не может быть завершён, так как есть незавершённые позиции" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "Заказ заблокирован и не может быть изменён" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Количество" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Номер позиции" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Записи о позиции" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Целевая дата этой позиции (оставьте пустой, чтобы использовать целевую дату заказа)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Описание позиции (необязательно)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Дополнительный контекст для этой строки" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Цена за единицу" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "Позиция заказа на закупку" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "Поставляемая деталь должна соответствовать поставщику" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "Заказ на сборку должен быть отмечен как внешний" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "Заказы на сборку могут быть связаны только со сборочными деталями" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "Деталь заказа на сборку должна соответствовать детали позиции" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Деталь поставщика" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Получено" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Количество полученных предметов" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Закупочная цена" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Закупочная цена" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "Внешний заказ на сборку, который будет выполнен этой позицией" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "Дополнительная позиция заказа на закупку" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "Позиция заказа на продажу" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Только продаваемые детали могут быть назначены заказу на продажу" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Цена продажи" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Цена последней продажи" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Доставлен" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Отгруженное кол-во" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "Отгрузка заказа на продажу" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "Адрес отгрузки должен соответствовать клиенту" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "Адрес доставки для этой отгрузки" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Дата отправления" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Дата доставки" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Дата доставки отгрузки" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Проверн" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Пользователь, проверивший эту отгрузку" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Отправление" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Номер отправления" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Номер отслеживания" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Информация об отслеживании доставки" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Номер счета" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Номер ссылки на связанную накладную" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Отгрузка уже отправлена" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Отправка не имеет зарезервированных складских позиций" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "Отгрузка должна быть проверена, прежде чем её можно завершить" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "Дополнительная позиция заказа на продажу" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "Распределение заказа на продажу" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "Складская позиция не была назначена" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Невозможно зарезервировать складскую позицию в позицию другой детали" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Невозможно распределить запас к позиции без детали" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Количество распределения не может превышать количество на складе" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "Количество должно быть 1 для сериализированных складских позиций" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Заказ на продажу не соответствует отгрузке" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Отгрузка не соответствует заказу на продажу" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Строка" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Ссылка на отгрузку заказа на продажу" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Элемент" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Выберите складскую позицию для резервирования" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Укажите резервируемое количество" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Ссылка на заказ на возврат" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Компания, из которой возвращаются товары" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Статус заказа на возврат" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "Позиция заказа на возврат" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "Необходимо указать складской элемент" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "Количество возврата превышает количество на складе" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "Количество возврата должно быть больше нуля" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "Недопустимое количество для серийного складского элемента" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Выберите позицию, возвращаемую от клиента" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Дата получения" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "Дата возврата" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Результат" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Результат для этой позиции" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Стоимость, связанная с возвратом или ремонтом этой позиции" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "Дополнительная позиция заказа на возврат" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID заказа" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID заказа для дублирования" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Копировать позиции" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Копировать позиции из исходного заказа" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Копировать дополнительные позиции" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Копировать дополнительные позиции из исходного заказа" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Скопировать параметры" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Позиции" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Завершённые позиции" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Дублировать заказ" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Указать параметры для дублирования этого заказа" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Недействительный ID заказа" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Имя поставщика" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Заказ не может быть отменён" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Разрешить закрывать заказ с незавершёнными позициями" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "В заказе есть незавершённые позиции" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "Заказ не открыт" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Автоматическая цена" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Автоматически рассчитывать закупочную цену на основе данных детали поставщика" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Валюта заказа на закупку" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Объединять элементы" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Объединять в одну позицию элементы, у которых одинаковая деталь, место хранения и целевая дата" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "Артикул" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Внутренний артикул детали" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Внутреннее название детали" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Необходимо указать поставляемую деталь" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Необходимо указать заказ на закупку" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Поставщик должен соответствовать заказу на закупку" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Заказ на закупку должен соответствовать поставщику" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Позиция" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Выберите место назначения для полученных элементов" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Введите код партии для поступающих складских позиций" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Истекает" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "Введите дату истечения срока годности для поступающих складских единиц" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Введите серийные номера для входящих складских позиций" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "Переопределить информацию об упаковке для поступающих складских единиц" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "Дополнительная заметка для поступающих складских единиц" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Штрих-код" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Сканированный штрих-код" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Штрихкод уже используется" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Необходимо предоставить позиции" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Необходимо указать место назначения" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Предоставленные значения штрихкодов должны быть уникальными" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Отгрузки" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Выполненные отгрузки" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "Зарезервированные позиции" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Валюта цены продажи" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Выделенные элементы" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Информация об отгрузке не предоставлена" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Позиция не связана с этим заказом" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Количество должно быть положительным" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Введите серийные номера для резервирования" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "Отгрузка уже отправлена" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "Отгрузка не связана с этим заказом" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Совпадений для следующих серийных номеров не найдено" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Следующие серийные номера недоступны" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Позиция заказа на возврат" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Позиция не соответствует заказу на возврат" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Позиция уже получена" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Предметы могут быть получены только по заказам, которые находятся в процессе выполнения" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "Количество для возврата" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Валюта цены позиции" @@ -5598,146 +5641,146 @@ msgstr "Возврат" msgid "Reject" msgstr "Отклонён" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Просроченные заказы на закупку" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Заказ на закупку {po} просрочен" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Просроченные заказы на продажу" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Заказ на продажу {so} просрочен" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Просроченный заказ на возврат" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "Заказ на возврат {ro} просрочен" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Помечено звёздочкой" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Фильтровать по отмеченным категориям" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Глубина" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Фильтровать по глубине категории" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Верхний уровень" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Фильтровать по категориям верхнего уровня" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Каскад" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Включать подкатегории в отфильтрованные результаты" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Родитель" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Фильтровать по родительской категории" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Исключить подкатегории указанной категории" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Есть результаты" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Является вариантом" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Является ревизией" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Есть ревизии" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Спецификация валидна" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Каскадные категории" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Если включено, включать элементы в дочерних категориях указанной категории" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Фильтровать по числовому идентификатору категории или литералу 'null'" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "Сборочная деталь активна" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "Отслеживаемая сборочная деталь" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Сборная деталь тестируется" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "Деталь компонента активна" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "Отслеживаемая деталь компонента" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "Компонент тестируется" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "Сборочная деталь компонента" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "Виртуальная деталь компонента" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "На складе" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Использования" @@ -5750,7 +5793,7 @@ msgstr "Категория детали" msgid "Part Categories" msgstr "Категория детали" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Место хранения по умолчанию" @@ -5778,7 +5821,7 @@ msgstr "Ключевые слова по умолчанию для детале msgid "Icon" msgstr "Значок" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Значок (необязательно)" @@ -5799,7 +5842,7 @@ msgstr "Значение по умолчанию" msgid "Default Parameter Value" msgstr "Значение параметра по умолчанию" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Детали" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "Деталь не может быть ревизией самой себя" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "Нельзя создать ревизию детали, которая уже является ревизией" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "Необходимо указать код ревизии" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "Ревизии разрешены только для сборочных деталей" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "Нельзя сделать ревизию шаблонной детали" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "Родительская деталь должна указывать на тот же шаблон" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Складская позиция с этим серийным номером уже существует" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "Дублирующий IPN не разрешён в настройках детали" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "Дублирующая ревизия детали уже существует." -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Деталь с таким именем, внутренним артикулом и ревизией уже существует." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Детали не могут быть назначены структурным категориям!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Наименование детали" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Шаблон" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Эта деталь является шаблоном?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Эта деталь является разновидностью другой детали?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Разновидность" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Описание детали (необязательно)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Ключевые слова" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Ключевые слова для улучшения видимости в результатах поиска" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Категория" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Внутренний артикул" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Ревизия или серийный номер детали" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Ревизия" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "Является ли эта деталь ревизией другой детали?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Ревизия от" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Где обычно хранится эта деталь?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Срок действия по умолчанию" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Срок годности (в днях) для складских позиций этой детали" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Минимальный запас" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Минимально допустимый складской запас" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Единицы измерения этой детали" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Может ли эта деталь быть создана из других деталей?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Может ли эта деталь использоваться для создания других деталей?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Является ли каждый экземпляр этой детали уникальным, обладающим серийным номером?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "Можно ли в этой детали записывать результаты тестов?" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Может ли эта деталь быть закуплена у внешних поставщиков?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Может ли эта деталь быть продана покупателям?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Эта деталь активна?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Заблокированные детали нельзя редактировать" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "Эта деталь виртуальная, как программный продукт или лицензия?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "Спецификация подтверждена" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "Валидна ли спецификация для этой детали?" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Контрольная сумма BOM" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Сохранённая контрольная сумма спецификации" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "BOM проверил" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Дата проверки BOM" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Создатель" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Ответственный владелец этой детали" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Продать несколько" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Валюта, используемая для кэширования расчётов цен" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Минимальная Стоимость BOM" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Минимальная стоимость компонентных деталей" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Максимальная Стоимость BOM" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Максимальная стоимость компонентных деталей" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Минимальная стоимость закупки" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Минимальная историческая стоимость закупки" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Максимальная стоимость закупки" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Максимальная историческая стоимость закупки" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Минимальная внутренняя цена" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Минимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Максимальная внутренняя цена" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Максимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Минимальная цена поставщика" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Минимальная цена детали от внешних поставщиков" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Максимальная цена поставщика" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Максимальная цена детали от внешних поставщиков" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Минимальная стоимость варианта" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Расчётная минимальная стоимость вариантов деталей" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Максимальная стоимость варианта" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Расчётная максимальная стоимость вариантов деталей" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Минимальная Стоимость" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Переопределить минимальную стоимость" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Максимальная Стоимость" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Переопределить максимальную стоимость" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Расчётная общая минимальная стоимость" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Расчётная общая максимальная стоимость" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Минимальная цена продажи" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Минимальная цена продажи на основе ценовых уровней" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Максимальная цена продажи" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Максимальная цена продажи на основе ценовых уровней" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Минимальная стоимость продажи" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Минимальная историческая цена продажи" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Максимальная стоимость продажи" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Максимальная историческая цена продажи" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Деталь для инвентаризации" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Количество элементов" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Количество отдельных складских позиций на момент инвентаризации" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Общий доступный запас на момент инвентаризации" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Дата" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Дата проведения инвентаризации" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Минимальная стоимость запасов" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Оценочная минимальная стоимость имеющихся запасов" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Максимальная стоимость запасов" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Оценочная максимальная стоимость имеющихся запасов" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "Цена продажи детали по порогу" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "Шаблон теста детали" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Недопустимое имя шаблона — должно содержать хотя бы один буквенно-цифровой символ" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Шаблоны тестов можно создавать только для тестируемых деталей" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "Шаблон теста с тем же ключом уже существует для детали" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Название теста" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Введите имя для теста" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "Ключ теста" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "Упрощённый ключ для теста" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Описание теста" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Введите описание для этого теста" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "Активен ли данный тест?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Необходим" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Необходимо ли пройти этот тест?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Требуется значение" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Требуется ли значение для этого теста при добавлении результата?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Требуются вложения" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Требуется ли прикреплять вложение в виде файла при добавлении результатов теста?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "Допустимые варианты данного теста(через запятую)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "Пункт спецификации нельзя изменить — сборка заблокирована" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Пункт спецификации нельзя изменить — вариант сборки заблокирован" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Выберите родительскую деталь" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Суб-деталь" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Выбрать деталь для использования в BOM" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Количество элементов в спецификации" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Эта позиция спецификации необязательна" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Эта позиция - расходник (она не отслеживается в заказах на производство)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "Количество для подготовки" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Дополнительное требуемое количество для сборки, учитывающее потери при подготовке" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "Потери" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Оценочные потери для сборки, выраженные в процентах (0–100)" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "Округление до кратности" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Округлять требуемое производственное количество до ближайшего кратного этого значения" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Ссылка на позицию спецификации" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Заметка о позиции в спецификации" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Контрольная сумма" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Контрольная сумма строки спецификации" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Проверен" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Этот пункт спецификации подтверждён" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Наследуется" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Позиция спецификации наследуется разновидностями детали" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Эту позицию можно заменять деталями, которые находятся на складе" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Для отслеживаемых деталей количество должно быть целым числом" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Необходимо указать поддеталь" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Замена пункта спецификации" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "Деталь для замены не может быть такой же, как основная деталь" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Позиция BOM-родителя" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Замена детали" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Деталь 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Деталь 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Выберите связанную деталь" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Заметка для данной связи" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Нельзя создать отношение детали с самой собой" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Дублирующее отношение уже существует" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Родительская категория" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Родительская категория деталей" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Подкатегории" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Результаты" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Количество результатов, зарегистрированных по этому шаблону" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Валюта закупки складской позиции" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Файл не является изображением" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Оригинальная деталь" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Выберите исходную деталь для копирования" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Копировать Изображение" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Копировать изображение из исходной детали" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Скопировать BOM" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Копировать спецификацию из исходной детали" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Скопировать параметры" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Копировать данные параметров из исходной детали" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Копировать Записи" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Скопировать записи из оригинальной детали" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Копировать тесты" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Копировать шаблоны тестов из исходной детали" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Начальное количество на складе" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Задайте начальное количество этой детали на складе. Если количество равно 0, складская позиция не будет добавлена." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Начальное местоположение запаса" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Укажите начальное местоположение запаса для этой детали" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Артикул производителя" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Выбранная компания не является допустимым поставщиком" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Выбранная компания не является допустимым производителем" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Деталь производителя с данным артикулом уже существует" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Деталь поставщика с данным артикулом уже существует" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Название категории" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Производится" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Количество этой детали, находящееся в производстве" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Оставшееся количество этой детали, запланированное к сборке" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Складские позиции" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "Ревизии" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Общий запас" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Нераспределённый запас" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Запас вариантов" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Копировать начальные данные из другой детали" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Начальный запас" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Создавать деталь с начальным количеством на складе" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Информация о поставщике" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Добавить начальную информацию о поставщике для этой детали" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Копировать параметры категории" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Копировать шаблоны параметров из выбранной категории деталей" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Существующее изображение" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Имя файла существующего изображения детали" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Файл изображения не существует" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Проверить всю спецификацию" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Можно произвести" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Требуется для заказов на сборку" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Выделено для заказов на сборку" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Требуется для заказов на продажу" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Выделено для заказов на продажу" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "Внутренний артикул детали" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "Описание детали" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Выберите деталь (и любые её варианты) для которой сгенерировать информацию об инвентаризации" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "Выберите категорию (и любые её подкатегории) для которой сгенерировать информацию об инвентаризации" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "Выберите склад, чтобы включить все детали в наличии в указанном складе (включая подразделы)" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "Создать записи инвентаризации" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "Сохранить записи инвентаризации для выбранных деталей" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "Создать отчет" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "Создать отчёт инвентаризации для выбранных деталей" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Минимальная цена" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Переопределить рассчитанное значение минимальной цены" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Валюта минимальной цены" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Максимальная цена" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Переопределить рассчитанное значение максимальной цены" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Валюта максимальной цены" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Обновить" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Обновить цены для этой детали" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Не удалось конвертировать из предоставленных валют в {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Минимальная цена не должна превышать максимальную цену" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Максимальная цена не должна быть меньше минимальной" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Выберите родительскую сборку" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Выберите деталь, которая является компонентом" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Выберите деталь, из которой копировать спецификацию" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Удалить существующие данные" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Удалить существующие пункты спецификации перед копированием" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Включая наследуемые" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Включать пункты спецификации, унаследованные от шаблонных деталей" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Пропустить некорректные строки" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Включите эту опцию, чтобы пропускать недопустимые строки" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Копировать детали-заменители" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Копировать детали-заменители при дублировании пунктов спецификации" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Уведомление о низком уровне запаса" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Доступный запас для {part.name} упал ниже настроенного минимального уровня" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Уведомление о просроченном запасе" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "У вас 1 складская единица приближается к дате истечения срока годности" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "У вас {item_count} складских единиц приближаются к дате истечения срока годности" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Нет даты истечения" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "Истёк {abs(days_diff)} дней назад" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Истекает сегодня" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} дней" @@ -7580,64 +7620,77 @@ msgstr "Предоставляет поддержку сканирования msgid "The Supplier which acts as 'TME'" msgstr "Поставщик, который представляет 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Только пользователи с правами персонала могут управлять плагинами" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Установка плагинов отключена" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Плагин успешно установлен" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Плагин установлен в {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Плагин не найден в реестре" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Плагин не является упакованным" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Имя пакета плагина не найдено" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Только пользователи с правами персонала могут управлять плагинами" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Удаление плагинов отключено" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Плагин нельзя удалить, так как он активен" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "Плагин нельзя удалить, так как он обязательный" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "Плагин нельзя удалить, так как он является образцом" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "Плагин нельзя удалить, так как он встроенный" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Плагин не установлен" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Установка плагина не найдена" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Плагин успешно удалён" @@ -7689,21 +7742,21 @@ msgstr "Пакетный плагин" msgid "Plugin" msgstr "Плагин" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Автор не найден" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Плагин '{p}' несовместим с текущей версией InvenTree {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Плагин требует как минимум версию {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Плагин требует не более версии {v}" @@ -7884,51 +7937,51 @@ msgstr "Установка не подтверждена" msgid "Either packagename or URL must be provided" msgstr "Необходимо указать название пакета или URL" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Полная перезагрузка" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Выполнить полную перезагрузку реестра плагинов" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Принудительная перезагрузка" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Принудительно перезагрузить реестр плагинов, даже если он уже загружен" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Собрать плагины" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Собрать плагины и добавить их в реестр" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Активировать плагин" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Активировать этот плагин" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Обязательный плагин нельзя деактивировать" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Удалить конфигурацию" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Удалить конфигурацию плагина из базы данных" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "Пользователь, для которого применяется эта настройка" @@ -8190,7 +8243,7 @@ msgstr "Всего" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Серийный номер" @@ -8215,7 +8268,7 @@ msgstr "Отчет тестирования складской позиции" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Установленные элементы" @@ -8248,184 +8301,196 @@ msgstr "Нет результата (обязательно)" msgid "No result" msgstr "Нет результата" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Файл ресурса не существует" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Файл изображения не найден" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "Тег part_image требует экземпляр детали" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "Тег company_image требует экземпляр компании" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Фильтровать по глубине местоположения" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Фильтровать по местоположениям верхнего уровня" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Включать подместоположения в отфильтрованные результаты" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Основной склад" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Фильтровать по родительскому местоположению" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Название детали (без учёта регистра)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Название детали содержит (без учёта регистра)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Название детали (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "IPN детали (без учёта регистра)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "IPN детали содержит (без учёта регистра)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "IPN детали (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Минимальный запас" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Максимальный запас" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Код статуса" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Внешнее местоположение" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Израсходовано для заказов на сборку" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Установлено в другом складе" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Древо Деталей" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Обновлено до" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Обновлено после" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Инвентаризация до" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Инвентаризация после" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Дата истечения до" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Дата истечения после" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Залежалый" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Укажите первичный ключ складского элемента, чтобы исключить этот элемент и всех его потомков" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "Каскад местоположений" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "Если включено, включать элементы в дочерних местоположениях данного местоположения" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Фильтровать по числовому идентификатору местоположения или литералу 'null'" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Необходимо указать количество" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Необходимо предоставить действительную деталь" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Указанная поставляемая деталь не существует" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "У поставляемой детали определён размер упаковки, но флаг use_pack_size не установлен" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Не нужно указывать серийные номера для неотслеживаемых деталей" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "Включать установленные" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "Если включено, включать результаты тестов для предметов, установленных под данным складским элементом" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "Фильтровать по числовому идентификатору складского элемента" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "Складской элемент с ID {id} не существует" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "Включая варианты деталей" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "После" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "До" @@ -8441,7 +8506,7 @@ msgstr "Типы местоположения склада" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Значок по умолчанию для мест хранения с невыбранным значком (необязательно)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Место хранения" @@ -8449,11 +8514,11 @@ msgstr "Место хранения" msgid "Stock Locations" msgstr "Места хранения" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Владелец" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Выберите владельца" @@ -8481,274 +8546,274 @@ msgstr "Тип места хранения данного склада" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Вы не можете сделать это место хранение структурным, потому, что некоторые складские позиции уже находятся в нем!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field} не существует" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Необходимо указать деталь" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Складские позиции не могут находиться в структурных местах хранения!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Складская позиция не может быть создана для виртуальных деталей" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Тип детали ('{self.supplier_part.part}') должен быть {self.part}" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Количество должно быть 1 для элемента с серийным номером" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Серийный номер нельзя задать, если количество больше 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Элемент не может принадлежать сам себе" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Элемент должен иметь ссылку на производство, если is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Ссылка на производство не указывает на тот же элемент" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Складская позиция" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Базовая деталь" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Выберите соответствующего поставщика детали для этой складской позиции" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Где находится эта складская позиция?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Упаковка этой складской позиции хранится в" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Установлено в" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Установлен ли этот элемент в другой элемент?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Серийный номер для этого элемента" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Код партии для этой складской позиции" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Количество на складе" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Исходное производство" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Производства для этой складской позиции" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Поглощен" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Заказ на производство, который поглотил эту складскую позицию" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Исходный заказ на закупку" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Заказ на закупку для этой складской позиции" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Целевой заказ на продажу" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Дата истечения срока годности для складской позиции. Остатки будут считаться просроченными после этой даты" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Удалить при обнулении" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Удалить эту складскую позицию при обнулении складского запаса" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Цена за единицу на момент покупки" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Преобразовано в деталь" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "Количество превышает доступный запас" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Деталь не является отслеживаемой" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Количество должно быть целым числом" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Количество не должно превышать доступный запас ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Серийные номера должны быть предоставлены в виде списка" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Количество не соответствует серийным номерам" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "Нельзя назначить запас в структурное местоположение" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Шаблон теста не существует" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Складская позиция была назначена заказу на продажу" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Складская позиция установлена в другую деталь" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Складская позиция содержит другие детали" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Складская позиция была назначена покупателю" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Складская позиция в производстве" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Серийные запасы нельзя объединить" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Дублирующие складские элементы" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь поставщика" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Коды статуса запаса должны совпадать" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Складской элемент нельзя переместить, так как он отсутствует на складе" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Отслеживание складского элемента" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Заметки к записи" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Результат теста складского элемента" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Для этого теста должно быть указано значение" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Для этого теста требуется загрузить вложения" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Недопустимое значение для этого теста" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Результат тестирования" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Результат выполнения теста" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Вложение с результатом теста" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Заметки о тестировании" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "Испытательное оборудование" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Идентификатор испытательного оборудования, на котором выполнялось тестирование" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "Запущен" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Время начала тестирования" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "Завершён" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Время окончания тестирования" @@ -8792,246 +8857,246 @@ msgstr "Выберите деталь для генерации серийног msgid "Quantity of serial numbers to generate" msgstr "Количество серийных номеров для генерации" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "Шаблон теста для этого результата" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "Для этой детали не найдено подходящего теста" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "Необходимо указать ID шаблона или имя теста" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "Время завершения теста не может быть раньше времени начала" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Родительский элемент" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "Родительский складской элемент" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Использовать размер упаковки при добавлении: заданное количество — это количество упаковок" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "Использовать размер упаковки" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Введите серийные номера для новых элементов" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Номер детали поставщика" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Просрочен" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Дочерние элементы" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "Отслеживание элементов" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Закупочная цена для этой складской позиции, за единицу или за упаковку" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Введите количество складских позиций для сериализации" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "Складской элемент не предоставлен" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Количество не должно превышать доступный запас ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Целевое место хранения" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Серийные номера не могут присваиваться данной детали" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Серийные номера уже существуют" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Выберите складскую позицию для установки" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Количество для установки" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Введите количество элементов для установки" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Добавить запись к транзакции (необязательно)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "Количество для установки должно быть не менее 1" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Складская позиция недоступна" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "Выбранная деталь отсутствует в спецификации" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "Количество для установки не должно превышать доступное количество" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Место назначения для демонтированного элемента" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Выберите деталь в которую будет преобразована складская позиция" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "Выбранная деталь не является допустимым вариантом для преобразования" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Невозможно преобразовать складскую позицию с назначенной деталью поставщика" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Статус складской позиции" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Выберите складские позиции для изменения статуса" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Не выбрано ни одной складской позиции" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Места хранения" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "Родительское местоположение запаса" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Деталь должна быть продаваемой" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "Элемент распределён в заказ на продажу" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "Элемент зарезервирован для заказа на производство" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Покупатель для назначения складских позиций" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "Выбранная компания не является покупателем" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Записи о назначенных запасах" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Необходимо предоставить список складских позиций" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Заметки об объединении складских позиций" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Разрешить несоответствие поставщиков" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Разрешить объединение складских позиций с различными поставщиками" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Разрешить несоответствие статусов" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Разрешить объединение складских позиций с различными статусами" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Необходимо предоставить как минимум 2 складские позиции" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Нет изменений" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Первичный ключ складского элемента" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "Складской элемент отсутствует на складе" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "Складской элемент уже на складе" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "Количество не должно быть отрицательным" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Заметки об изменении склада" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "Объединить с существующим запасом" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "Объединять возвращённые элементы с существующими складскими элементами, если возможно" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "Следующий серийный номер" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "Предыдущий серийный номер" @@ -9537,59 +9602,75 @@ msgstr "Фамилия пользователя" msgid "Email address of the user" msgstr "Адрес электронной почты пользователя" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Персонал" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Имеет ли этот пользователь права персонала" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Суперпользователь" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Это пользователь является суперпользователем" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Активна эта учетная запись" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "Только суперпользователь может изменить это поле" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "Пароль" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "Пароль пользователя" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "Игнорировать предупреждение" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "Игнорировать предупреждение о правилах пароля" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "У вас нет разрешения на создание пользователей" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Ваша учётная запись была успешно создана." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Пожалуйста, используйте функцию сброса пароля для входа" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Добро пожаловать в InvenTree" diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po index 40289a78a9..72cd76e844 100644 --- a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -112,13 +104,13 @@ msgstr "" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "" @@ -131,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +215,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "" @@ -313,75 +321,66 @@ msgstr "" msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po index d685a3f30a..adf0976196 100644 --- a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API vmesnik ni najden" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Uporabnik nima dovoljenja pogleda tega modela" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Ni mogoče pretvoriti {original} v {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Podana napačna količina" @@ -112,13 +104,13 @@ msgstr "Vnesi datum" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Zapiski" @@ -131,75 +123,91 @@ msgstr "Vrednost '{name}' ni v predpisanem formatu" msgid "Provided value does not match required pattern: " msgstr "Podana vrednost se ujema s predpisanim vzorcem: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Prazno polje serijske številke" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Dvojna serijska številka" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Doseg skupine {group} presega dovoljene količine ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Serijske številke niso najdene" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Odstranite oznako HTML iz te vrednosti" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Napaka povezave" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Odziv serverja: napravilni status kode" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Pojavila se je izjema" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Odziv serverja: napačna dolžina vrednosti" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Prevelika velikost slike" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Prenos slike presegel največjo velikost" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Oddaljeni server vrnil prazen odziv" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Podani URL ni veljavna slikovna datoteka" @@ -207,11 +215,11 @@ msgstr "Podani URL ni veljavna slikovna datoteka" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-pošta" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "Referenčna številka prevelika" msgid "Invalid choice" msgstr "Nedovoljena izbira" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Opis" msgid "Description (optional)" msgstr "Opis (opcijsko)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Pot" @@ -313,75 +321,66 @@ msgstr "Enolična oznaka podatkov črtne kode" msgid "Existing barcode found" msgstr "Črtna koda že obstaja" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Napaka strežnika" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Zaznana napaka na strežniku." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Mora biti veljavna številka" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Izberite valuto med razpoložljivimi možnostmi" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Neveljavna vrednost" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Oddaljena slika" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "Povezava do oddaljene slike" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Prenos slik iz oddaljene povezave ni omogočen" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Kitajščina (poenostavljena)" msgid "Chinese (Traditional)" msgstr "Kitajščina (tradicionalno)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "Neveljavna fizična enota" msgid "Not a valid currency code" msgstr "Neveljavna oznaka valute" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Nadrejena izgradnja" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Dodeljeno meni" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Dodeljeno" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Neobvezno" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montaža" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Sledi" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Testno" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Dodeljeno" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Na voljo" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Nalog izgradnje" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Nalogi izgradnje" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Sestava BOM ni bila potrjena" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Naveden mora biti odgovorni uporabnik ali skupina" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Referenca naloga izgradnje" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Referenca naloga izgradnje" msgid "Reference" msgstr "Referenca" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Izberite del za izgradnjo" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referenca dobavnica" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Lokacija vira" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Izberite lokacijo dela za to izgradnjo (v primeru da ni pomembno pusti prazno)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Ciljna lokacija" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Izberite lokacijo, kjer bodo končne postavke shranjene" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Količina izgradenj" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Število postavk za izgradnjo" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Končane postavke" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Število postavk zaloge, ki so bile končane" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Status izgradnje" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Koda statusa izgradnje" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Številka serije" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Številka serije za to izgradnjo" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Datum ustvarjenja" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Rok dokončanja" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Rok končanja izdelave. Izdelava po tem datumu bo v zamudi po tem datumu." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Datom končanja" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "dokončal" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Izdal" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Uporabnik, ki je izdal nalog za izgradnjo" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odgovoren" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Odgovorni uporabnik ali skupina za to naročilo" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Zunanja povezava" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Zunanja povezava" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Nalog izgradnje {build} je dokončan" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Nalog izgradnej dokončan" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Ni določena izgradnja" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Igradnja je že dokončana" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Izgradnja se ne ujema s nalogom izdelave" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Količina" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Izdelana postavka mora imeti izgradnjo, če je glavni del označen kot sledljiv" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Količina za zalogo s serijsko številko mora biti 1" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Prestavljena zaloga ({q}) ne sme presegati zaloge ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Preveč zaloge je prestavljene" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Postavka zaloge" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Izvorna postavka zaloge" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Količina zaloge za prestavljanje za izgradnjo" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Inštaliraj v" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Destinacija postavke zaloge" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Izgradnja" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Izgradnja se ne ujema z nadrejeno izgradnjo" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Izhodni del se ne ujema s naročilom sestava" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Ta sestava je že zaključena" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "Preklicano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Končano" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Uporabnik" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktivno" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Povezava" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Priloga" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Manjka datoteka" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Manjka zunanja povezava" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Izberite prilogo" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Komentar" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Ime datoteke" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Poslano" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Prestavljena količina mora biti večja od 0" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "Priimek uporabnika" msgid "Email address of the user" msgstr "Email uporabnika" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Osebje" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Ali ima ta uporabnik pravice osebja" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Superuporabnik" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Ali je ta uporabnik superuporabnik" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Ali je ta račun aktiven" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Vaš račun je bil ustvarjen." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Za prijavo uporabite funkcijo ponastavitve gesla" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Dobrodošli v InvenTree" diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po index d0c2928edb..30970e411a 100644 --- a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API krajnja tačka nije pronađena" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Lista nevalidiranih stavki" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Dati su neispravni filteri" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Korisnik nema dozvolu za pregled ovog modela" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nije moguće konvertovati {original} u {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Isporučena nevažeća količina" @@ -112,13 +104,13 @@ msgstr "Unesite datum" msgid "Invalid decimal value" msgstr "Neispravna decimalna vrednost" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Napomene" @@ -131,75 +123,91 @@ msgstr "Vrednost '{name}' se ne pojavljuje u formatu obrasca" msgid "Provided value does not match required pattern: " msgstr "Navedena vrednost ne odgovara traženom obrascu: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Nije moguće dati više od 1000 serijskih brojeva stavkama odjednom" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Serijski broj nije popunjen" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Dupliciraj serijski broj" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Nevažeća grupa: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Raspon grupe {group} prelazi dozvoljenu količinu ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Nisu pronađeni serijski brojevi" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Uklonite HTML oznake iz ove vrednosti" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Podatak sadrži zabranjen jezički sadržaj" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Greška u povezivanju" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Server je odgovorio nevažećim statusnim kodom" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Došlo je do izuzetka" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Server je odgovorio nevažećom vrednošću dužina sadržaja" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Veličina slike je prevelika" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Preuzimanje slike premašilo je maksimalnu veličinu" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Udaljeni server vratio je prazan odgovor" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Navedeni URL nije važeća slikovna datoteka" @@ -207,11 +215,11 @@ msgstr "Navedeni URL nije važeća slikovna datoteka" msgid "Log in to the app" msgstr "Prijavljivanje na aplikaciju" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-Pošta" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "Broj reference je predugačak" msgid "Invalid choice" msgstr "Nevažeći izvor" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Opis" msgid "Description (optional)" msgstr "Opis (Opciono)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Putanja" @@ -313,75 +321,66 @@ msgstr "Jedinstveni hash barkoda" msgid "Existing barcode found" msgstr "Postojeći barkod pronađen" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Neuspešan zadatak" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Pozadinski proces '{f}' neuspešan posle {n} pokušaja" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Greška servera" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Server je zabležio grešku." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Slika" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Mora biti važeći broj" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Odaberite valutu među dostupnim opcijama" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Nevažeća vrednost" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Udaljena slika" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL udaljene slike" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Preuzimanje slika s udaljenog URL-a nije omogućeno" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Neuspešno preuzimanje slike sa udaljene URL" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Kineski (Uprošćeni)" msgid "Chinese (Traditional)" msgstr "Kineski (Tradicionalni)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "Nevažeća jedinica mere" msgid "Not a valid currency code" msgstr "Nevažeći kod valute" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Status naloga" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Roditeljski proizvod" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Uključi varijante" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Uključi varijante" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Uključi varijante" msgid "Part" msgstr "Deo" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategorija" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Proizvod predaka" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Dodeljeno meni" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Dodeljeno" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Kreirano pre" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Kreirano nakon" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Ciljni datum pre" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Ciljni datum nakon" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Završeno pre" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Završeno nakon" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Ne uključuj stablo" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Proizvod mora biti poništen pre nego što se izbriše" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Potrošni materijal" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Opciono" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Sklapanje" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Praćeno" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Proverljivo" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Neizmirena narudžbina" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Alocirano" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostupno" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Po narudžbini" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Nalog za izradu" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Lokacija" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Nalozi za izradu" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "BOM za sastavljanje nije potvrđeno" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Nalog za izradu se ne može kreirati za neaktivan deo" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Nalog za izradu se ne može kreirati za zaključan deo" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Odgovorni korisnik ili grupa mora biti određena" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Deo u nalogu za izradu ne može se izmeniti" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Reference naloga za pravljenje" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Reference naloga za pravljenje" msgid "Reference" msgstr "Referenca" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Kratak opis izrade (nije obavezno)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Izaberi deo za izgradnju" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referenca naloga za prodaju" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Lokacija izvora" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Izaberi lokaciju zaliha za ovu izgradnju (ostaviti prazno ako hoćete bilo koju lokaciju zaliha" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Lokacija odredišta" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Izaberi lokaciju gde će se završene stavke skladištiti" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Količina izgradnje" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Broj stavki za izgradnju" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Kompletirane stavke" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Broj stavki u zalihama koje su kompletirane" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Status izgradnje" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Kod statusa izgradnje" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Kod serije" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Kod izgradnje za ovaj izlaz" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "datum kreiranja" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Datum ciljanog završetka" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ciljani datum za završetak izgradnje. Izgradnja će biti u prekoračenju nakon ovog datuma" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Datum završetka" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "kompletirano od " -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "izdato od" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Korisnik koji je izdao nalog za izgradnju" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odgovoran" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Korisnik ili grupa koja je odgovorna za ovaj nalog za izgradnju" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Spoljašnja konekcija" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link za eksterni URL" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Prioritet izgradnje" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioritet ovog naloga za izgradnju" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Kod projekta" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Kod projekta za ovaj nalog za izgradnju" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Nije uspelo preuzimanje zadataka da bi se dovršila alokacija izgradnje" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Nalog za izgradnju {build} je kompletiran" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Nalog za izgradnju je kompletiran" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Za delove koji mogu da se prate moraju se dostaviri serijski brojevi" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nije određen izlaz izgradnje" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Izlaz izgradnje je već kompletiran" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Izlaz izgradnje se ne slaže sa Nalogom za izgradnju" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Količina mora biti veća od nule" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Količina ne sme da bude veća od izlazne količine" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Izlaz izgradnje {serial} nije zadovoljio zahtevane testove" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Stavka porudžbine naloga za izgradnju" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Objekat izgradnje" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Objekat izgradnje" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Količina" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Potrebna količina za nalog za izgradnju" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Stavka izgradnje mora imati izlaz izgradnje, jer je nadređeni deo markiran da može da se prati" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Izabrana stavka zaliha se ne slaže sa porudžbinom sa spiska materijala" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Količina mora da bude 1 za zalihe koje su serijalizovane" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Alocirana količina ({q}) ne sme da bude veća od količine dostupnih zaliha ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Stavka zaliha je prealocirana" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Stavka zaliha" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Izvor stavke zaliha" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Količina zaliha za alociranje za izgradnju" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Ugradi u" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Stavka zaliha odredišta" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Nivo izgradnje" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Ime dela" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Izlaz izgradnje" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Izlaz izgradnje se ne slaže sa nadređenom izgradnjom" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Izlazni deo se ne slaže sa delom Naloga za Izgradnju" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Ovaj izlaz izgradnje je već kompletiran" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Ovaj izlaz izgradnje nije u potpunosti alociran" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Unesi količinu za izlaz izgradnje" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Brojčana količina potrebna za delove koji mogu da se prate" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Potrebna je brojčana količina, jer opis materijala sadrži delove koji se mogu pratiti" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Serijski brojevi" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Unesi serijske brojeve za izlaz izgradnje" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Lokacija zaliha za izlaz izgradnje" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Automatski alociraj serijske brojeve" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatski alociraj tražene stavke sa odgovarajućim serijskim brojevima" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Sledeći serijski brojevi već postoje ili su neispravni" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Lista izlaza izgradnje se mora obezbediti" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Lokacija zaliha za otpisane izlaze" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Odbaci alokacije" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Odbaci bilo kojiu alokaciju zaliha za otpisane izlaze" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Razlog za otpisane izlaz(e) izgradnje" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Lokacija za završene izlaze izgradnje" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Prihvati nekompletirane Alokacije" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "kompletiraj izlaze ako zalihe nisu u potpunosti alocirane" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Troši alocirane zalihe" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Troši bilo koje zalihe koje su već alocirane za ovu izgradnju" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Ukloni nekompletirane izlaze" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Izbriši svei izlaze izgradnje koji nisu kompletirani" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Nije dozvoljeno" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Prihvati kao potrošeno od strane ovog naloga za izgradnju" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Izmesti bre završetka ovog naloga za izgradnju" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Sveukupne izdvojene zalihe" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Šta želite da radite sa viškom stavki u zalihama koje su dodeljene nalogu za izgradnju?" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Neke stavke zaliha su prealocirane" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Prihvati nealocirano" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Prihvati da stavke zaliha nisu u potpunosti alocirane za ovaj nalog za izgradnju" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Tražene zalihe nisu u potpunosti alocirane" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Prihvati nekompletirano" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Prihvati da je traženi broj izlaza izgradnje nekompletan" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Traženi broj izgradnji nije kompletan" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Nalog za izgradnju ima otvoren potčinjene naloge za izgradnju" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Nalog za izgradnju mora biti u stanju produkcije" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Nalog za izgradnju ima nekompletne izlaze" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Porudžbina izgradnje" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Izlaz izgradnje" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Izlaz izgradnje mora da referencira istu izgradnju" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Stavka porudžbine za izradu" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part mora da se referencira istom delu kao u nalogu za izgradnju" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Stavka mora da bude u zalihama" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupna količina ({q}) premašena" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Izlaz izgradnje mora da određen za alokaciju praćenih delova" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Izlaz izgradnje ne može biti određen za alokaciju nepraćenih delova" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Stavke alociranja se moraju odrediti" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lokacija zaliha koje će da budu izvor delova (ostavi prazno ukoliko uzimate sa bilo koje lokacije)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Isključi lokaciju" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Isključi stavke zaliha za ovu selektovanu lokaciju" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Zamenljive zalihe" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Stavke zaliha koje su na različitim lokacijama se mogu međusobno menjati" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Zamenske zalihe" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Dozvoli alociranje delova koji su zamenski" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Opcionalne stavke" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Alociraj opcione BOM stavke na nalog za izgradnju" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Greška prilikom startovanja auto alociranja" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Referenca BOM" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "BOM ID dela" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "BOM ime dela" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Deo dobavljača" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Alocirana količina" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Referenca izgradnje" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Ime kategorije dela" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Može da se prati" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Nasleđen" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Dozvoli varijante" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "BOM stavka" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "U proizvodnji" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Spoljašnje zalihe" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Dostupne zalihe" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Dostupne zamenske zalihe" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Dostupne varijante zaliha" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "Na čekanju" msgid "Cancelled" msgstr "Otkazano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Gotovo" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Potrebne su zalihe za nalog izgranje" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Prekoračeni nalog za izgradnju" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Nalog za izgradnju {bo} je sada prekoračen" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "je link" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "je datoteka" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Korisnik nema potrebne dozvole da bi izbrisao ove atačmente" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Korisnik nema dozvolu da izbriše ovaj atačment" @@ -1555,794 +1554,794 @@ msgstr "Nema dodataka" msgid "Project Code Label" msgstr "Naziv koda projekta" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Ažurirano" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Vreme poslednjeg ažuriranja" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Jedinstveni kod projekta" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Opis projekta" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Korisnik ili grupa odgovorni za ovaj projkat" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Ključ za podešavanje" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Vrednost podešavanja" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Izabrana vrednost nije ispravna opcija" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Vrednost mora da bude boolean tipa" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Vrednost mora da bude integer tipa" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Vrednost mora biti broj" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "Vrednost ne prolazi test ispravnosti" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Tekstualni ključ mora da bude jedinstven" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Korisnik" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Prelomna količina cene" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Cena" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Cena jedinice za određenu količinu" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Krajnja tačka" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Krajnja tačka na kojoj je primljen zahtev za izmenu web stranice" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Ime ovog zahteva za izmenu stranice" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktivan" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Da li je ovaj zahtev za izmenu aktivan?" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Token za pristup" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Tajna" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Deljena tajna za HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "ID poruke" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Jedinstveni identifikator za ovu poruku" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Računar" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Računar koji je primio ovu poruku" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Zaglavlje" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Zaglavlje ove poruke" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Telo" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Telo ove poruke" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Krajnja tačka na kojoj je ova poruka primljena" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Radilo se na " -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Da li je rad sa ovom porukom završen?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Id" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Naslov" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Objavljeno" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Autor" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Rezime" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Čitaj" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Da li je ova stavka vesti pročitana" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Datoteka slike" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "Ciljni tip modela za ovu sliku" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "Ciljni ID modela za ovu sliku" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Posebna jedinica" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Simbol jedinice mora biti jedinstven" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Ime jedinice mora da bude ispravan identifikator" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Ime jedinice" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Simbol" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Opcioni simbol jedinice" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definicija" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Definicija jedinice" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Prilog" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Nedostaje datoteka" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Nedostaje eksterni link" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Izaberite datoteku za prilog" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Komentar" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Komentar priloga" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Datum učitavanja" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Datum kada je datoteka učitana" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Veličina datoteke" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Veličina datoteke u bajtovima" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Određen je neispravan tip modela za prilog" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Posebno stanje" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Posebna stanja" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Referentni status podešen" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Status je podešen i produžen je sa ovim posebnim stanjem" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logički ključ" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "Stanje logičkog ključa je jednako posebnom ključu u poslovnoj logici" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Vrednost" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "Numerička vrednost koja će biti sačuvana u bazi podataka modela" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Ime stanja" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Etiketa" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Etiketa koja će biti prikazana na korisničkoj strani" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Boja" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Boja koja će biti prikazana na korisničkoj strani" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Model" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "Model ovog stanja je povezan sa " -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Model mora biti izabran" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "Ključ mora biti izabran" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "Logički ključ mora biti izabran" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "Ključ mora da se razlikuje od logičkog ključa" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Validna referenca statusa klase mora biti dostavljena" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "Ključ mora biti različit od logičkog ključa referentnog statusa" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "Logički ključ mora biti među logičkim ključevima referentnog statusa" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "Naziv mora biti različit od naziva u statusu reference" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Lista odabira" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Liste odabira" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Ime liste odabira" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Opis liste odabira" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Zaključano" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Da li je ova lista odabira zaključana?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Da li se ova lista odabira može koristiti?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Ekstenzija/dodatak za izvor" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Ekstenzija koja pruža listu odabira" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "String izvora" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Opcioni string koji identifikuje izvor koji se koristi za ovu listu" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Podrazumevani unos" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Podrazumevani unos za ovu listu odabira" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Kreirano" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Datum i vreme kada je ova lista odabira kreirana" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Poslednje ažuriranje" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Datum i vreme kada je ova lista odabira ažurirana" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Unos liste odabira" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Unosi liste odabira" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Lista odabira kojoj ovaj unos pripada" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Vrednost ovog unosa liste odabira" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Naziv ovog unosa liste odabira" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Opis ovog unosa liste odabira" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "Da li je unos ove liste odabira aktivan?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Šablon parametra" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Checkbox parametri ne mogu imati jedinice" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parametri ne mogu imati izbore" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Izbori moraju biti jedinstveni" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Ime šablona parametra mora biti jedinstveno" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Naziv parametra" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Jedinice" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Fizičke jedinice za ovaj parametar" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Opis parametra" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Polje za potvrdu" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Da li je ovaj parametar checkbox?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Izbori" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Validni izbori za ovaj parametar (razdvojeni zapetom)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "Lista izbora za ovaj parametar" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Omogućen" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Nije validan izbor za vrednost parametra" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Šablon" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Podaci" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Vrednost parametra" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Beleška" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Opciona beleška" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Skeniranje bar koda" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Podaci bar koda" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Korisnik koji je skenirao bar kod" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Vremenski trag" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Datum i vreme skeniranja bar koda" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "URL krajnja tačka kojaj je obradila bar kod" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Kontekst podataka za skeniranje bar koda" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Odgovor" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Podaci odgovora za skeniranje bar koda" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Rezultat" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "Da li je skeniranje bar koda bilo uspešno?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Ključ" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} poništeno" msgid "A order that is assigned to you was canceled" msgstr "Narudžbina koja je bila dodeljena vama je otkazana" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Stavke primljene" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Pokrenuto je" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Čekaju se zadaci" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Planirani zadaci" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Propali zadaci" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID zadatka" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Jedinstveni ID zadatka" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Zaključaj" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Vreme zaključavanja" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Naziv zadatka" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Funkcija" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Ime funkcije" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumenti" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumenti zadatka" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Ključne reči argumenata" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Ključne reči argumenata zadatka" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Ime datoteke" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Tip modela" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Korisnik nema dozvolu da napravi ili izmeni priloge za ovaj model" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista odabira je zaključana" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Nema grupe" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "URL sajta je zaključan od strane konfiguracije" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Ponovno pokretanje potrebno" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Podešavanje je izmenjeno i zahteva ponovno pokretanje servera" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Migracije na čekanju" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Broj migracija baze podataka koje su na čekanju" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Ime instance servera" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Stringovni opis instance servera" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Ime instance korisnika" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Koristi ime instance u naslovnoj liniji" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Zabrani prikazivanje `O nama`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Prikaži `O nama` samo superkorisnicima" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Ime kompanije" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Interno ime kompanije" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Osnovni URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Osnovni URL za instancu servera" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Podrazumevana valuta" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Izaberi osnovnu valutu za određivanje cena" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Podržane valute" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Lista kodova podržanih valuta" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Interval ažuriranja valuta" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Koliko često ažurirati devizne kurseve (podesi na nulu za onemogućti)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "dani" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Dodatak za ažuriranje valute" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Dodatak za ažuriranje valute koji će se koristiti" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Skini sa URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Dozvoli skidanje sa udaljenih lokacija slika i datoteka" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Ograničenje veličine skidanja" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Maksimalna dozvoljena veličina slike koja se skida" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "Korisnik-agent koji se koristi za skidanje sa URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Dozvoli premošćavanje koji će se korisnik-agent koristiti za skidanje slika i datoteka sa spoljašnjeg URL (ostavi prazno da se podesi kao podrazumevano)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Stroga validacija URL" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "Traži specifikaciju za validaciju URL-ova" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Ažuriraj interval provere" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Koliko često da proveravam za nova ažuriranja? (podesi na nulu da bi isključio)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Automatsko pravljenje rezervne kopije" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Omogući automatsko pravljenje rezervne kopije baze podataka i medijskih datoteka" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Automatski interval pravljenja rezervnih kopija" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Odredi broj dana između automatskih pravljenja rezervnih kopija" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Interval brisanja zadataka" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Rezultati pozadinskih zadataka biće izbrisani nakon određenog broja dana " -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Interval brisanja evidencije grešaka" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Evidencija grešaka biće izbrisana nakon određenog broja dana" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Interval brisanja obaveštenja" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Korisnička obaveštenja biće izbrisana nakon određenog broja dana" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Podrška za bar kod" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Omogući podršku za bar kod skener preko interfejsa stranice" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Uskladišti rezultate bar koda" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Uskladišti rezultate bar koda u bazu podataka" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Maksimalan broj skeniranja bar koda" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Maksimalan broj rezultata skeniranja bar koda koji treba da se skladišti" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Kašnjenje unosa bar koda" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Vreme kašnjena obrađivanja ulaza bar koda" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Podrška za bar kod veb kameru" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Omogući skeniranje bar koda pomoću veb kamere u pretraživaču" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Prikaži podatke bar koda" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Prikaži podatke bar koda u pretraživaču kao tekst" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Dodatak za generisanje bar koda" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Dodatak koji će se koristiti kao interni generator podataka bar koda" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Revizije dela" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Omogući polje za reviziju dela" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "Jedino revizija sastavljanja " -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "Dozvoli jedino revizije za sastavne delove" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Dozvoli brisanje iz sastavljanja" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Dozvoli brisanje delova koji su korišćeni u sastavljanju" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "Interni broj dela regex" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Regularni obrazac izraza za podudaranje IPN dela" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Dozvoli duple IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Dozvoli da više delova dele isti IPN" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Dozvoli izmenu IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Dozvoli izmenu IPN vrednosti u toku izmene dela" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Kopiraj BOM podatke dela" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Podrazumevaj kopiranje BOM podataka prilikom pravljenja duplikata dela " -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Kopiraj podatke parametara dela" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Podrazumevaj kopiranje podataka parametara dela prilikom pravljenja duplikata dela" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Kopiraj podatke testiranja dela" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Podrazumevaj kopiranje podataka testiranja dela prilikom pravljenja duplikata dela" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Kopiraj šablone parametara kategorije" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Kopiraj šablone parametara kategorije prilikom pravljenja dela" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Podrazumevano je da su delovi šabloni" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Podrazumevano je da se delovi mogu sastavljati od drugih komponenti" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponenta" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Podrazumevano je da se delovi mogu koristi kao pod-komponente" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Može da se kupi" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Podrazumevano je da se delovi mogu kupiti" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Može da se proda" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "podrazumevano je da delovi mogu da se prodaju" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Podrazumevano je da delovi mogu da se prate" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtuelni" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Podrazumevano je da su delovi virtuelni" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Prikaži povezane delove" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Prikaži povezane delove za deo" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Inicijalni podaci zaliha" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Dozvoli kreiranje inicijalne alihe prilikom dodavanja novog dela" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Podaci inicijalnog dobavljača" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Dozvoli kreiranje inicijalnog dobavljača prilikom dodavanja novog dela" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Format prikazivanja imena dela" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Format u kome će se prikazivati ime dela" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Podrazumevana ikona za kategoriju dela" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Podrazumevana ikona za kategoriju dela (prazno znači bez ikone)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Minimalan broj decimalnih mesta za cene" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimalan broj decimalnih mesta prilikom generisanja cenovnih podataka" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Maksimalan broj decimalnih mesta za cene" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maksimalan broj decimalnih mesta prilikom generisanja cenovnih podataka" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Koristi cene dobavljača" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Uključi pauziranje cene dobavljača u sveukupnom računanju cene" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Premosti istorijat kupovina" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Prethodne cene narudžbenice zamenjuje pauze cena dobavljača" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Koristi cene stavki u zalihama" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Koristi cene koje su ručno unete u podatke zaliha" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Godina cena stavki u zalihama" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Odstrani stavke zaliha iz kalkulacija cena, koje su starije od ovog broja dana" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Koristi drugačije cene" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Uključi drugačije cene u sveukupnim kalkulacijama cene" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Samo aktivne varijante" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Koristi samo aktivne varijante za određivanje varijante cene" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Vremenski period za ponovno određivanje cena" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Broj dana koji treba da prođe da bi se cene delova automatski ažurirale" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Interne cene" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Omogući interne cene za delove" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Premošćavanje internih cena" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Ako su dostupne, interne cene premošćuju kalkulacije opsega cena" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Omogući štampanje etiketa" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Omogući štampanje etiketa preko web interfejsa" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "DPI slike etikete" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI rezolucija prilikom generisanja slikovne datoteke za dodatak koji štampa etikete" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Omogući izveštaje" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Omogući generisanje izveštaja" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Mod otklanjanja grešaka" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Generiši izveštaje u modu za otklanjanje grešaka (izlaz je u HTML)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Greške evidencije izveštaja" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Greške evidentiranja koje se dese prilikom generisanja izveštaja" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Veličina stranice" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Podrazumevana veličina strane za izveštaje u PDF formatu" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Zahtevaj jedinice parametara" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Ako su jedinice date, vrednosti parametara moraju odgovarati datim jedinicama" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Globalno jedinstveni serijski brojevi" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Serijski brojevi za stavke zaliha moraju da budu globalno jedinstveni" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Obriši ispražnjene zalihe" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Ovo određuje podrazumevano ponašanje kada je stavka zaliha istrošena" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Šablon koda serije" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Šablon za generisanje podrazumevanih kodova serije stavki u zalihama" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Datum isteka zaliha" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Omogući funkcionalnost isteka zaliha" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Prodaja isteklih zaliha" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Dozvoli prodaju isteklih zaliha" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Vreme zastarevanja zaliha" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Broj dana tokom kojih će se stavke zaliha smatrati zastarelim pre isteka" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Izrada sa isteklim zalihama" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Dozvoli izradu sa isteklim zalihama" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Vlasnička kontrola zaliha" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Omogući vlasničku kontrolu nad lokacijama zaliha i stavkama" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Podrazumevana ikonica lokacije zaliha" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Podrazumevana ikonica lokacije zaliha (prazno znači da nema ikonice)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Prikaži instalirane stavke sa zaliha" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Prikaži instalirane stavke sa zaliha u stok tabelama" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Proveri spisak materijala pri instalaciji stavki" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Instalirane stavke sa zaliha moraju postojati u spisku materijala nadređenog dela" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Dozvoli transfer van zaliha" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Dozvoli da stavke sa zaliha koje nisu na zalihama budu premeštane između lokacija zaliha" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Referentni šablon naloga za izradu" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Potreban šablon za generisanje referentnog polja naloga za izradu" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Potreban odgovoran vlasnik" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Odgovoran vlasnik mora biti dodeljen svakom nalogu" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Potreban aktivan deo" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Spreči kreiranje naloga za izradu za neaktivne delove" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Potreban zaključan deo" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Spreči kreiranje nalogaza izradu za otključane delove" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "Potreban validan spisak materijala" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "Spreči kreiranje naloga za izradu pre validacije spiska materijala" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "Potrebno završavanje podređenih naloga" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Spreči završavanje naloga za izradu pre završavanja svih podređenih naloga" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Blokiraj dok ne prođe test" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Spreči završavanje naloga za izradu pre uspešnog završetka svih testova" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Omogući naloge za vraćanje" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Omogući funkcionalnost vraćana u korisničkom interfejsu" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Referentni šablon naloga za vraćanje" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "Potreban šablon pri generisanju referentnog polja naloga za vraćanje" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Izmeni završene naloge za vraćanje" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Dozvoli izmenu naloga za vraćanje nakon što su završeni" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Referentni šablon naloga za prodaju" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Potreban šablon pri generisanju referentnog polja naloga za prodaju" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Podrazumevana isporuka naloga za prodaju" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Omogućava kreiranje podrazumevane isporuke sa nalozima za prodaju" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Izmeni završene naloge za prodaju" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Dozvoli izmenu naloga za prodaju nakon što su isporučeni ili završeni" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Označi isporučene naloge kao završene" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Nalozi za prodaju označeni kao isporučeni će automatski biti završeni, zaobilazeći status isporučen" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Referentni šablon naloga za kupovinu" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Potreban šablon pri generisanju referentnog polja naloga za kupovinu" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Izmeni završene naloge za kupovinu" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Dozvoli izmenu naloga za kupovinu nakon što su isporučeni ili završeni" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Automatski završi naloge za kupovinu" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatski označi naloge za kupovinu kao završene kada su primljene sve stavke porudžbine" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Omogući zaboravljenu lozinku" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Omogući funkcionalnost zaboravljene lozinke na stranicama za prijavljivanje" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Omogući registraciju" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Omogući registraciju korisnicima na stranicama za prijavljivanje" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Omogući SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Omogući SSO na stranicama za prijavljivanje" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Omogući SSO registraciju" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Omogući registraciju preko SSO za korisnike na stranicaa za prijavljivanje" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "Omogući SSO sinhronizaciju grupa" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Omogući sinhronizaciju grupa aplikacije sa grupama IdP-a" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "SSO ključ grupe" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Nazivi grupa dobijaju atribute od IdP-a" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "Mapiranje SSO grupa" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Mapiranje SSO grupa u lokalne grupe aplikacije. Ukoliko lokalna grupa ne postoji, biće kreirana." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "Ukloni grupe van SSO" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Da li će grupe dodeljene korisnicima biti uklonjene ukoliko nisu podržane IdP-om. Onemogućavanje ovoga može dovesti do problema." -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Email neophodan" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Zahtevaj od korisnika da dostavi mejl prilikom registracije" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Automatski popuni SSO korisnike" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatski popuni korisnikove podatke iz SSO naloga" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Email dva puta" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Pitaj korisnika dva puta za email prilikom registracije" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Lozinka dva puta" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Pitaj korisnika dva puta za lozinku prilikom registracije" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Dozvoljeni domeni" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Ograniči registraciju na određene domene (razdvojeni zapetom, počinju sa @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Grupa pri registrovanju" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupa kojoj se novi korisnici dodeljuju pri registraciji. Ukoliko je SSO group sync omogućen, ova grupa će se dodavati ukoliko korisnik ne može da dobije grupu iz IdP-a." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Nametni MFA" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Korisnici moraju koristiti multifaktorsku bezbednost" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Proveri plugine pri pokretanju" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Proveri da li su svi pluginovi instalirani pri pokretanju - omogućeni u kontejnerskim okruženjima" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Proveri ažuriranja pluginova" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Omogući periodično proveranje pluginova" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Omogući URL integraciju" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Omogući da pluginovi dodaju URL rute" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Omogući integraciju u navigaciju" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Omogući integraciju pluginova u navigaciju" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Omogući integraciju aplikacija" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Omogući pluginovima da dodaju aplikacije" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Omogući integraciju planiranja" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Omogući da plugini izvršavaju planirane zadatke" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Omogući integraciju događaja" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Omogući da plugini odgovaraju na unutrašnje događaje" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Omogući integraciju interfejsa" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Omogući integraciju pluginova u korisnički interfejs" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Ne uključuj eksterne lokacije" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Period automatskog popisa" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Prikaži puna imena korisnika" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Prikaži puna imena korisnika umesto korisničkih imena" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Omogući podatke test stanica" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Omogući prikupljanje podataka sa test stanica radi rezultata testova" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "Deo je aktivan" msgid "Manufacturer is Active" msgstr "Proizvođač je aktivan" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "Deo dobavljača je aktivan" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "Interni deo je aktivan" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "Dobavljač je aktivan" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Proizvođač" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Kompanija" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Ima zalihe" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Kompanije" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Opis kompanije" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Opis kompanije" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Vebsajt" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Vebsajt kompanije" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Broj telefona" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Broj telefona kontakta" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Email adresa kontakta" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Osoba za kontakt" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link ka eksternim informacijama o kompaniji" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Da li je ova kompanija aktivna?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Je mušterija" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Da li prodajete stavke ovoj kompaniji?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Je dobavljač" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Da li kupujete stavke od ove kompanije?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Je proizvođač" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Da li ova kompanija proizvodi delove?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Podrazumevana valuta za ovu kompaniju" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Adrese" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Adrese" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Izaberi kompaniju" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Naslov adrese" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Naslov koji opisuje adresu" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Primarna adresa" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Postavi kao primarnu adresu" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Telefon 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Adresa 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Telefon 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Adresa 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Poštanski broj" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Grad/region" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Poštanski broj" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Država/provincija" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Država ili provincija" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Zemlja" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Adresa zemlje" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Beleške za kurira" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Beleške za kurira" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Interne beleške o isporuci" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Beleške o isporuci za internu upotrebu" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link za adresne informacije (eksterni)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Deo proizvođača" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Osnovni deo" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Izaberi deo" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Izaberi proizvođača" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "Broj dela proizvođača" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Broj dela proizvođača" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL za link eksternog dela proizvođača" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Opis dela proizvođača" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Jedinice pakovanja moraju biti kompatibilne sa osnovnim jedinicama dela" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Jedinice pakovanja moraju biti veće od nule" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Povezani delovi dobavljača moraju referencirati isti osnovni deo" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Dobavljač" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Izaberi dobavljača" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Jedinica za držanje dobavljačevih zaliha" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Da li je ovaj deo dobavljača aktivan?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Izaberi deo proizvođača" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL za link dela eksternog dobavljača" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Opis dela dobavljača" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "osnovni trošak" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalna naplata (npr. taksa za slaganje)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Pakovanje" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Pakovanje delova" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Količina pakovanja" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Ukupna količina dostavljena u jednom pakovanju. Ostaviti prazno za pojedinačne stavke." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "više" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Naruči više" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Količine dostupne od dobavljača" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Dostupnost ažurirana" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Datum poslednjeg ažuriranja podataka o dostupnosti" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Smanjenje cene dobavljača" @@ -4316,7 +4323,7 @@ msgstr "Podrazumevana valuta koja se koristi za ovog dobavljača" msgid "Company Name" msgstr "Naziv kompanije" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Na zalihama" @@ -4452,7 +4459,7 @@ msgstr "Polje ne postoji u ciljnom modelu" msgid "Selected field is read-only" msgstr "Izabrano polje je samo za čitanje" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Uvezi sesiju" @@ -4464,31 +4471,31 @@ msgstr "Polje" msgid "Column" msgstr "Kolona" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Indeks vrsta" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Originalni podaci vrste" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Greške" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Važeće" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "Broj kopija za štampanje od svakog natpisa" msgid "Connected" msgstr "Konektovano" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Nepoznato" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Referenca naloga" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Izvanredno" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Ima šifru projekta" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Kreirano do strane" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Kreirano pre" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Kreirano nakon" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Krajnji datum pre" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Krajnji datum nakon" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Ima cenu" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Završen pre" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Završen nakon" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Nalog" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Nalog završen" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Interni deo" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Nalog na čekanju" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Završeno" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Ima isporuku" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Nalog za kupovinu" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Nalog za kupovinu" msgid "Sales Order" msgstr "Nalog za prodaju" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Ukupna cena" msgid "Total price for this order" msgstr "Totalna cena ovog naloga" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Valuta naloga" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta za ovaj nalog (ostaviti prazno za podrazumevanu valutu kompanije)" @@ -4851,718 +4870,742 @@ msgstr "Valuta za ovaj nalog (ostaviti prazno za podrazumevanu valutu kompanije) msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Kontakt se ne poklapa sa izabranom kompanijom" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Opis naloga (opciono)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Izaberi šifru projekta za ovaj nalog" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Link ka eksternoj stranici" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ciljani datum" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Očekivani datum za isporuku. Nalog će biti zastareo nakon ovog datuma." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Datum izdavanja" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Datum kada je nalog izdat" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Korisnik ili grupa odgovorni za ovaj nalog" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Lice za kontakt za ovaj nalog" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Adresa kompanije za ovaj nalog" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Referenca naloga" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Status naloga za kupovinu" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Kompanija od koje su stavke naručene" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Referenca dobavljača" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Referentni kod dobavljača naloga" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "primljeno od strane" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Datum kada je nalog završen" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Odredište" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Odredište za primljene stavke" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Dobavljač dela se mora poklapati sa dobavljačem naloga za kupovinu" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Stavka porudžbine se ne poklapa sa nalogom za kupovinu" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Količina mora biti pozitivan broj" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Mušterija" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Kompanija kojoj se prodaju stavke" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Status naloga za prodaju" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Referenca mušterije" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Referentni kod mušterijinog naloga" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Datum isporuke" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "isporučeno od strane" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "Nalog je već završen" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "Nalog je već otkazan" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Samo otvoren nalog može biti označen kao završen" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Nalog ne može biti završen jer ima nepotpunih isporuka" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Nalog ne može biti završen jer ima nepotpunih alokacija" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "Nalog ne može biti završen jer ima nezavršenih stavki porudbžine" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Količina stavki" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Referenca stavke porudbžine" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Beleške stavke porudbžine" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Krajnji datum za ovu stavku porudbćine (ostaviti prazno za krajnji datum sa naloga)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Opis stavke porudžbine (opciono)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Dodatni kontekst za ovu porudžbinu" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Cena jedinice" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "Stavka porudžbine naloga za kupovinu" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "Deo dobavljača se mora poklapati sa dobavljačem" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Deo dobavljača" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Primljeno" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Broj primljenih stavki" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Kupovna cena" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Kupovna cena jedinice" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "Dodatna porudbžina naloga za kupovinu" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "Stavka porudžbine naloga za prodaju" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Samo delovi koji se mogu prodati mogu biti dodeljeni nalogu za prodaju" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Prodajna cena" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Prodajna cena jedinice" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Poslato" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Isporučena količina" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "Isporuka naloga za prodaju" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Datum isporuke" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Datum dostavljanja" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Datum dostavljanja isporuke" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Provereno od strane" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Korisnik koji je proverio ovu isporuku" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Isporuka" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Broj isporuke" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Broj praćenja" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Informacije o praćenju isporuke" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Broj računa" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Referentni broj za dodeljeni račun" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Isporuka je već poslata" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Isporuka nema alocirane stavke sa zaliha" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "Dodatne porudbžine naloga za prodaju" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "Alokacije naloga za prodaju" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "Stavka sa zaliha nije dodeljena" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Ne mogu se alocirati stavke sa zaliha porudbžini sa drugačijim delom" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Ne mogu se alocirati zalihe porudbžini bez dela" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Alocirana količina ne sme da pređe količinu zaliha" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Količina alokacije mora da bude veća od nule" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "Količina mora biti 1 za serijalizovane stavke sa zaliha" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Nalog za prodaju se ne poklapa sa isporukom" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Isporuka se ne poklapa sa nalogom za prodaju" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Porudbžina" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Referenca isporuke naloga za prodaju" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Stavka" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Izaberi stavku sa zaliha za alokaciju" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Unesi količinu za alokaciju zaliha" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Referenca naloga za vraćanje" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Kompanija čije stavke su vraćene" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Status naloga za vraćanje" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "Vrati stavku porudbžine" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "Stavka sa zaliha mora biti određena" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "Količina vraćanja je premašila količinu zaliha" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "Količina vraćanja mora biti veća od nule" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "Nevažeća količina za serijalizovane stavke sa zaliha" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Izaberi stavku za vraćanje od mušterije" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Primljeno datuma" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Ishod" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Ishod za ovu stavku porudžbine" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Trošak asociran sa popravkom ili vraćanjem ove stavke porudžbine" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "Doda" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID naloga" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID naloga koji će se duplirati" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Kopiraj porudžbine" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Kopiraj stavke porudžbine sa originalnog naloga" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Kopiraj dodatne porudžbine" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Kopiraj dodatne stavke porudžbine sa originalnog naloga" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopiraj parametre" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Stavke porudbžine" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Završene porudbžine" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Dupliraj nalog" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Odredi opcije za dupliranje ovog naloga" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Nevažeći ID naloga" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Naziv dobavljača" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Nalog ne može biti otkazan" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Dozvoli da nalog bude zatvoren sa nepotpunim porudžbinama" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "Nalog ima nepotpune stavke porudžbine" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "Nalog nije otvoren" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Automatske cene" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automatski izračunaj kupovnu cenu na osnovu podataka o delovima dobavljača" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Valuta kupovne cene" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Spoj stavke" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Spoj stavke sa istim delom, odredištem i ciljanim datumom u jednu stavku porudžbine" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "Jedinica za praćenje zaliha" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Interni broj dela" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Interni naziv dela" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Deo dobavljača mora biti određen" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Nalog za kupovinu mora biti određen" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Dobavljač mora da se poklapa sa nalogom za kupovinu" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Nalog za kupovinu mora da se poklapa sa dobavljačem" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Stavka porudbžine" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Izaberi odredišnu lokaciju za primljene stavke" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Unesi šifru ture za nadolazeće stavke sa zaliha" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Datum isteka" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Unesi serijske brojeve za nadolazeće stavke sa zaliha" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "Promeni informacije o pakovanju za nadolazeće stavke sa zaliha" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "Dodatne beleške za nadolazeće stavke sa zaliha" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Bar kod" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Skeniran bar kod" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Bar kod je već u upotrebi" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Stavke porudžbine moraju biti dostavljene" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Odredišna lokacija mora biti određena" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Pružene vrednosti bar kodova moraju biti jedinstvene" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Isporuke" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Završene isporuke" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Valuta prodajne cene" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Alocirane stavke" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Nisu dostavljeni detalji isporuke" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Stavka porudžbine nije asocirana sa ovim nalogom" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Količina mora biti pozitivna" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Unesi serijske brojeve za alokaciju" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "Isporuka je već isporučena" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "Isporuka nije povezana sa ovim nalogom" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Nema pronađenih poklapanja za sledeće serijske brojeve" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Sledeći serijski brojevi su nedostupni" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Stavka porudžbine naloga za vraćanje" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Stavka porudžbine se ne poklapa sa nalogom za vraćanje" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Stavka porudžbine je već primljena" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Stavke se mogu primiti samo na osnovu naloga koji su u toku" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "Količina za vraćanje" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Valuta cene porudžbine" @@ -5598,146 +5641,146 @@ msgstr "Refundiraj" msgid "Reject" msgstr "Odbij" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Istekli nalozi za kupovinu" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Nalog za kupovinu {po} je sada istekao" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Istekli nalozi za prodaju" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Nalog za prodaju {so} je sada istekao" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Označeno zvezdicom" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filtiraj po kategorijama označenim zvezdicom" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Dubina" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtriraj po dubini kategorije" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Vrhovni" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtriraj po vrhovnim kategorijama" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Kaskadno" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Uključi pod-kategorije u filtriranim rezultatima" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Nadređen" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filtriraj po nadređenoj kategoriji" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Ne uključuj pod-kategorije pod specifičnom kategorijom" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Ima rezultate" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Je revizija" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Ima revizije" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Spisak materijala validan" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Deo sklopa se može testirati" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "Deo komponente se može testirati" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Koristi" @@ -5750,7 +5793,7 @@ msgstr "Kategorija dela" msgid "Part Categories" msgstr "Kategorije delova" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Podrazumevana lokacija" @@ -5778,7 +5821,7 @@ msgstr "Podrazumevane ključne reči za delove ove kategorije" msgid "Icon" msgstr "Ikonica" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikonica (opciono)" @@ -5799,7 +5842,7 @@ msgstr "Podrazumevana vrednost" msgid "Default Parameter Value" msgstr "Podrazumevana vrednost parametra" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Delovi" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "Deo ne može biti revizija samog sebe" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "Ne može se kreirati revizija dela koji je već revizija" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "Šifra revizije mora biti dostavljena" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "Revizije su dozvoljene samo za delove sklopove" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "Ne može se izvršiti revizija šablonskog dela" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "Nadređeni deo mora biti vezan sa istim šablonom" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Stavka sa ovim serijskim brojem već postoji" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplirani interni brojevi dela nisu dozvoljeni u podešavanjima dela" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "Identična revizija dela već postoji" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Deo sa ovim nazivom, internim brojem dela i revizijom već postoji" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Delovi ne mogu biti dodeljeni strukturnim kategorijama delova!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Naziv dela" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Jeste šablon" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Da li je ovaj deo šablonski deo?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Da li je ovaj deo varijanta drugog dela?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Varijanta od" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Opis dela (opciono)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Ključne reči" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Ključne reči dela da bi se poboljšala vidljivost u rezultatima pretrage" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Kategorija dela" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interni broj dela" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Revizija dela ili broj verzije" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Revizija" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "Da li je ovaj deo revizija drugog dela?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Revizija od" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Gde je ova stavka inače skladištena?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Podrazumevani istek" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Vreme isteka (u danima) za stavke sa zaliha ovog dela" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimalne zalihe" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Minimalni dozvoljen nivo zaliha" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Jedinice mere za ovaj deo" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Da li ovaj deo može biti izgrađen od drugih delova?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Da li ovaj deo može biti korišćen za izradu drugih delova?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Da li ovaj deo ima praćenje za više stavki?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "Da li ovaj deo može imati svoje rezultate testa?" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Da li ovaj deo može biti kupljen od eksternih dobavljača?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Da li ovaj deo može biti prodat mušterijama?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Da li je ovaj deo aktivan?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Zaključani delovi se ne mogu menjati" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "Da li je ovo virtuelni deo, kao na primer softver ili licenca?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Suma spiska materijala" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Uskladištena suma spiska materijala" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "Spisak materijala proveren od strane" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Spisak materijala proveren datuma" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Korisnik koji je kreirao" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Vlasnik odgovoran za ovaj deo" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Prodaj više" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Valuta korišćena za vršenje proračuna o cenama" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Minimalna vrednost spiska materijala" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Minimalna vrednost komponenti delova" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Maksimalna vrednost spiska materijala" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Maksimalna vrednost komponenti delova" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Minimalna kupovna vrednost" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Minimalna istorijska kupovna vrednost" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Maksimalna kupovna vrednost" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Maksimalna istorijska kupovna vrednost" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Minimalna interna cena" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Minimalna cena bazirana na internim sniženjima cena" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Maksimalna interna cena" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Maksimalna vrednost bazirana na internim sniženjima cena" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Minimalna cena dobavljača" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Minimalna cena dela od eksternih dobavljača" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Maksimalna cena dobavljača" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Maksimalna cena dela od eksternih dobavljača" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Minimalna vrednost varijanti" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Izračunata minimalna vrednost varijanti delova" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Maksimalna vrednost varijanti" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Izračunata maksimalna vrednost varijanti delova" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Minimalna vrednost" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Promeni minimalnu vrednost" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Maksimalna vrednost" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Promeni maksimalnu vrednost" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Ukupna izračunata minimalna vrednost" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Ukupna izračunata maksimalna vrednost" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Minimalna prodajna cena" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Minimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Maksimalna prodajna cena" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Maksimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Minimalna prodajna vrednost" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Minimalna istorijska prodajna cena" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Maksimalna prodajna vrednost" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Maksimalna istorijska prodajna cena" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Deo za popis" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Broj stavki" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Broj individualnih unosa zaliha u vreme popisa" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Ukupne dostupne zalihe za vreme popisa" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Datum kada je izvršen popis" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Minimalna vrednost zaliha" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Procenjena minimalna vrednost trenutnih zaliha" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Maksimalna vrednost zaliha" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Procenjena maksimalna vrednost trenutnih zaliha" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "Smanjenje prodajne cene dela" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "Šablon testa dela" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Nevažeći naziv šablona - mora da uključuje bar jedan alfanumerički karakter" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Test šabloni mogu biti kreirani samo za delove koje je moguće testirati" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "Test šablon sa istim ključem već postoji za ovaj deo" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Naziv testa" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Unesi naziv za ovaj test" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "Test ključ" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "Pojednostavljen ključ za test" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Opis testa" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Unesi opis za ovaj test" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "Da li je ovaj test omogućen?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Neophodno" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Da li je neophodno da ovaj test prođe?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Zahteva vrednost" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Da li ovaj test zahteva vrednost prilikom dodavanja rezultata testa?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Zahteva prilog" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Da li ovaj test zahteva fajl kao prilog prilikom dodavanja rezultata testa?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "Validni izbori za ovaj test (razdvojeni zapetom)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "Stavke sa spiska materijala se ne mogu modifikovati - sklapanje je zaključano" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Stavke sa spiska materijala se ne mogu modifikovati - sklapanje varijanti je zaključano" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Izaberi nadređeni deo" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Pod-deo" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Izaberi deo koji će biti korišćen u spisku materijala" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Količina spiskova materijala za ovu stavku sa spiska materijala" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Ova stavka sa spiska materijala je opciona" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ova stavka sa spiska materijala se može potrošiti (nije praćena u nalozima za izradu)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Referenca stavke sa spiska materijala" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Beleške stavki sa spiska materijala" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Suma" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Suma spiska materijala" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Validirano" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Ova stavka sa spiska materijala je validirana" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Biva nasleđeno" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ova stavka sa spiska materijala je nasleđivana od spiska materijala za varijante delova" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Stavke sa zaliha za varijante delova se mogu koristiti za ovu stavku sa spiska materijala" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Količina mora biti ceo broj za delove koji se mogu pratiti" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Zamenski deo mora biti određen" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Zamenska stavka sa spiska materijala" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "Zamenski deo ne može biti isti kao glavni deo" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Nadređena stavka sa spiska materijala" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Zamenski deo" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Deo 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Deo 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Izaberi povezan deo" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Beleška za ovu relaciju" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Relacija između delova ne može biti kreirana između jednog istog dela" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Identična veza već postoji" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Nadređena kategorija" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Nadređena kategorija dela" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Podkategorije" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Rezultati" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Broj rezultata napravljenih na osnovu ovog šablona" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Valuta kupovine za ovu stavku sa zaliha" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Originalni deo" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Izaberi originalni deo za duplikaciju" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopiraj sliku" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Kopiraj sliku sa originalnog dela" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Kopiraj spisak materijala" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Kopiraj spisak materijala sa originalnog dela" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Kopiraj parametre" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Kopiraj parametarske podatke sa originalnog dela" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Kopiraj beleške" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Kopiraj beleške sa originalnog dela" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Inicijalna količina zaliha" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Odredi inicijalnu količinu zaliha za ovaj deo. Ukoliko je količina nula, neće biti dodate zalihe." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Inicijalna lokacija zaliha" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Odredi inicijalnu lokaciju zaliha za ovaj deo" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Izaberi dobavljača (ostavi prazno za preskakanje)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Izaberi proizvođača (ostavi prazno za preskakanje)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Broj dela proizvođača" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Izabrana kompanija nije validan dobavljač" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Izabrana kompanija nije validan proizvođač" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Deo proizvođača koji se poklapa sa ovim brojem dela proizvođača već postoji" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Deo dobavljača koji se opklapa sa ovim brojem dela dobavljača već postoji" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Naziv kategorije" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Izrađivanje" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Stavke sa zaliha" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "Revizije" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Ukupne zalihe" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Nealocirane zalihe" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Varijante zaliha" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Dupliraj deo" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kopiraj inicijalne podatke od drugog dela" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Početne zalihe" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Kreiraj deo sa početnom količinom zaliha" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Informacije o dobavljaču" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Dodaj inicijalne informacije o dobavljaču za ovaj deo" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kopiraj parametre kategorije" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Kopiraj parametarske šablone sa izabrane kategorije dela" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Postojeća slika" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Ime fajla postojeće slike dela" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Fajl sa slikom ne postoji" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Validiraj ceo spisak materijala" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Može se izgraditi" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minimalna cena" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Izmeni izračunatu vrednost za minimalnu cenu" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Minimalna valuta cene" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Maksimalna cena" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Izmeni izračunatu vrednost maksimalne cene" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Maksimalna valuta cene" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Ažuriraj" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Ažuriraj cene za ovaj deo" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nija moguća konverzija iz dostavljen valute u {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Minimalna cena ne sme biti veća od maksimalne cene" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Maksimalna cena ne sme biti manja od minimalne cene" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Izaberi nadređeni sklop" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Izaberi komponentu dela" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Izaberi deo sa kog će se kopirati spisak materijala" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Ukloni postojeće podatke" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Ukloni postojeće stavke sa spiska materijala pre kopiranja" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Uključi nasleđeno" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Uključi stavke sa spiska materijala koje su nasleđene od šablonskih delova" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Preskoči nevažeće vrste" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Omogući ovu opciju za preskakanje nevažećih vrsta" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Kopiraj zamenske delove" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopiraj zamenske delove prilikom duplikacije stavki sa spiska materijala" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notifikacija o niskim zalihama" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Dostupne zalihe za {part.name} su pale ispod konfigurisanog minimalnog nivoa" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "Pruža podršku za skeniranje TME bar kodova" msgid "The Supplier which acts as 'TME'" msgstr "Dobavljač koji se ponaša kao 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Samo osoblje može da administrira pluginove" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Instalacija plugina je onemogućena" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Plugin instaliran uspešno" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Instaliran plugin na {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Plugin nije pronađen u registru" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Plugin nije paket plugin" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Ime paketa plugina nije pronađeno" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Samo osoblje može da administrira pluginove" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Deinstaliranje plugina je onemogućeno" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Plugin ne može biti deinstaliran jer je trenutno aktivan" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Plugin nije instaliran" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Instalacija plugina nije pronađena" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Plugin uspešno deinstaliran" @@ -7689,21 +7742,21 @@ msgstr "Paket plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nije pronađen autor" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Plugin '{p}' nije kompatibilan sa trenutnom verzijom aplikacije {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Plugin zahteva najmanje verziju {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Plugin zahteva najviše verziju {v}" @@ -7884,51 +7937,51 @@ msgstr "Instalacija nije potvrđena" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Potpuno ponovno učitavanje" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Izvrši potpuno ponovno učitavanje registra pluginova" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Nasilno ponovo učitaj" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Nasilno ponovo učitaj registar pluginova, iako je već učitan" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Skupi plugine" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Skupi plugine i dodaj ih u registar" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Aktiviraj plugin" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Aktiviraj ovaj plugin" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Obriši konfiguraciju" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Obriši konfiguraciju plugina iz baze podataka" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "Ukupno" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serijski broj" @@ -8215,7 +8268,7 @@ msgstr "Izveštaj sa testa za stavku sa zaliha" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Instalirane stavke" @@ -8248,184 +8301,196 @@ msgstr "Nema rezultata (neophodno)" msgid "No result" msgstr "Nema rezultata" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Fajl ne postoji" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Slika nije pronađena" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "part_image tag zahteva instancu dela" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image tag zahteva instancu kompanije" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filtriraj po dubini lokacije" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Filtriraj po nadređenim lokacijama" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Uključi podlokacije u filtriranim rezultatima" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Nadređena lokacija" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtriraj po nadređenoj lokaciji" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Ime dela" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Ime dela sadrži" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Ime dela (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Interni deo broja" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Interni deo broja sadrži (osetljivo na velika i mala slova)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Interni broj dela (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Minimalne zalihe" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Maksimalne zalihe" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Statusni kod" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Eksterna lokacija" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Potrošeno od strane naloga za izradu" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Instalirano u drugu stavku sa zaliha" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Stablo dela" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Ažurirano pre" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Ažurirano nakon" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Popis pre" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Popis nakon" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Datum isteka pre" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Datum isteka nakon" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Zastarelo" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Količina je neophodna" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Validan deo mora biti dosavljen" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Dati dobavljač ne postoji" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Deo dobavljača ima definisanu veličinu pakovanja, ali fleg use_pack_size nije postavljen" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serijski brojevi ne mogu biti dostavljeni za deo koji nije moguće pratiti" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "Tipovi lokacija zaliha" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Podrazumevana ikonica za sve lokacije koje nemaju podešenu ikonicu (opciono)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Lokacija zaliha" @@ -8449,11 +8514,11 @@ msgstr "Lokacija zaliha" msgid "Stock Locations" msgstr "Lokacija zaliha" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Vlasnik" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Izaberi vlasnika" @@ -8481,274 +8546,274 @@ msgstr "Tip lokacija zaliha za ovu lokaciju" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Ne možete postaviti ovu lokaciju zaliha kao strukturnu jer su već neke stavke locirane na njoj!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Deo mora biti određen" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Stavka sa zaliha ne može biti locirana u strukturnim lokacijama zaliha!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Stavka sa zaliha ne može biti kreirana za virtuelne delove" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Deo tipa ('{self.supplier_part.part}') mora biti {self.part}" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Količina mora biti 1 za stavku sa serijskim brojem" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Serijski broj ne može biti postavljen ukoliko je količina veća od 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Stavka ne može da pripada samoj sebi" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Stavka mora da ima referencu izgradnje ukoliko is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Referenca izgradnje ne ukazuje na isti objekat dela" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Nadređena stavka sa zaliha" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Osnovni deo" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Izaberi odgovarajući deo dobavljača za ovu stavku sa zaliha" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Gde je locirana ova stavka sa zaliha?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Pakovanje u kom je ova stavka sa zaliha" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Instalirano u" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Da li je ova stavka instalirana u drugu stavku?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Serijski broj za ovu stavku" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Šifra ture za ovu stavku sa zaliha" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Količina zaliha" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Izvorna gradnja" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Nalog za ovu stavku sa zaliha" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Potrošeno od strane" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Nalog za izradu koji je potrošio ovu stavku sa zaliha" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Izvorni nalog za kupovinu" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Nalog za kupovinu za ovu stavku sa zaliha" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Odredište naloga za prodaju" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Datum isteka za stavku sa zaliha. Zalihe će se smatrati isteklim nakon ovog datuma" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Obriši kad je potrošeno" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Obriši ovu stavku sa zaliha kada su zalihe potrošene" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Cena kupovine jedne jedinice u vreme kupovine" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Konvertovano u deo" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Deo nije postavljen kao deo koji je moguće pratiti" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Količina mora biti ceo broj" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Količina ne sme da pređe dostupnu količinu zaliha ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Serijski brojevi moraju biti dostavljeni kao lista" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Količine se ne poklapaju sa serijskim brojevima" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Test šablon ne postoji" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Stavka sa zaliha je dodeljena nalogu za prodaju" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Stavka sa zaliha je instalirana u drugu stavku" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Stavka sa zaliha sadrži druge stavke" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Stavka sa zaliha je dodeljena mušteriji" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Stavka sa zaliha je trenutno u produkciji" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Serijalizovane zalihe se ne mogu spojiti" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Dupliraj stavke sa zaliha" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Stavke sa zaliha se moraju odnositi na isti deo" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Stavke sa zaliha se moraju odnositi na isti deo dobavljača" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Statusne šifre zaliha moraju da se poklapaju" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stavka se ne može pomeriti jer nije na zalihama" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Praćenje stavke sa zaliha" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Ulazne beleške" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Rezultat testa stavke sa zaliha" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Vrednost mora biti dostavljena za ovaj test" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Prilog mora biti dostavljen za ovaj test" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Nevažeća vrednost za ovaj test" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Rezultat testa" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Vrednost završetka testa" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Prilog uz test rezultat" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Beleške sa testa" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "Stanica za testiranje" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Identifikator stanice za testiranje gde je test izvršen" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "Započeto" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Vreme početka testa" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "Završeno" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Vreme završetka testa" @@ -8792,246 +8857,246 @@ msgstr "Izaberi deo za koji će se generisati serijski broj" msgid "Quantity of serial numbers to generate" msgstr "Količina serijskih brojeva koji će se generisati" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "Test šablon za ovaj rezultat" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "ID šablona ili ime testa mora biti dostavljeno" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "Vreme završetka testa ne može biti pre vremena početka testa" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Nadređena stavka" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "Nadređena stavka sa zaliha" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Koristi pakovanja prilikom dodavanja: količina je definisana brojem pakovanja" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Unesi serijske brojeve za nove stavke" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Dobavljački broj dela" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Isteklo" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Podređene stavke" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "Stavke za praćenje" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Nabavna cena ove stavke, po jedinici ili pakovanju" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Unesi broj stavka sa zaliha za serijalizaciju" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Količina ne sme da pređe dostupnu količinu zaliha ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Odredišna lokacija zaliha" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Serijski brojevi ne mogu biti dodeljeni ovom delu" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Serijski broj već postoji" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Izaberi stavku za instaliranje" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Količina za instaliranje" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Izaberi količinu stavki za instaliranje" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Dodaj beleške transakcija (opciono)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "Količina za instaliranje mora biti najmanje 1" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Stavka je nedostupna" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "Izabrani deo nije na spisku materijala" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "Količina za instaliranje ne sme preći dostupnu količinu" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Odredišna lokacija za deinstalirane stavke" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Izaberi deo u koji će se konvertovati stavka" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "Izabrani deo nije validna opcija za konverziju" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Ne može se konvertovati stavka sa dodeljenim delom dobavljača" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Statusni kod stavke sa zaliha" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Izaberi stavke kojoj će se promeniti status" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Nije izabrana stavka" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Podlokacije" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "Lokacija nadređenih zaliha" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Deo mora biti za prodaju" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "Stavka je alocirana nalogu za prodaju" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "Stavka je alocirana nalogu za izradu" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Mušterija kojoj će se dodeliti stavke sa zaliha" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "Izabrana kompanija nije mušterija" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Beleške dodeljivanja zaliha" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Lista stavki mora biti dostavljena" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Beleške spajanja zaliha" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Dozvoli neslagajuće dobavljače" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Dozvoli spajanje stavki sa različitim delovima dobavljača" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Dozvoli neslagajući status" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Dozvoli spajanje stavki sa različitim statusnim kodovima" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Bar dve stavke moraju biti dostavljene" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Nema promena" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Vrednost primarnog ključa stavke" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "Stavka nije na zalihama" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Beleške transakcija zaliha" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "Prezime korisnika" msgid "Email address of the user" msgstr "Adresa E-pošte korisnika" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Osoblje" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Da li ovaj korisnik ima dozvole koje ima osoblje?" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Super korisnik" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Da li je ovaj korisnik Super korisnik?" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Da li je nalog ovog korisnika aktivan?" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Vaš nalog je kreiran" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Molimo vas koristite opciju resetovanja lozinke da biste se prijavili" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Dobrodošli u InvenTree" diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po index a310c49a42..5e083c05e2 100644 --- a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API-slutpunkt hittades inte" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Användaren har inte behörighet att se denna modell" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Kunde inte konvertera {original} till {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" @@ -112,13 +104,13 @@ msgstr "Ange datum" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Anteckningar" @@ -131,75 +123,91 @@ msgstr "Värdet '{name}' visas inte i mönsterformat" msgid "Provided value does not match required pattern: " msgstr "Det angivna värdet matchar inte det obligatoriska mönstret: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Tom serienummersträng" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Serienummret finns redan" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Ogiltig grupp: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Gruppintervall {group} överstiger tillåtet antal ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Inga serienummer hittades" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Ta bort HTML-taggar från detta värde" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Anslutningsfel" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Servern svarade med ogiltig statuskod" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Undantag inträffade" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Servern svarade med ogiltigt innehållslängdsvärde" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Bilden är för stor" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Nedladdning av bilder överskred maximal storlek" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Fjärrservern returnerade tomt svar" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Angiven URL är inte en giltig bildfil" @@ -207,11 +215,11 @@ msgstr "Angiven URL är inte en giltig bildfil" msgid "Log in to the app" msgstr "Logga in på appen" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-postadress" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Du måste aktivera tvåfaktorsautentisering innan du kan göra något annat." @@ -259,18 +267,18 @@ msgstr "Referensnumret är för stort" msgid "Invalid choice" msgstr "Ogiltigt val" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Namn" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Beskrivning" msgid "Description (optional)" msgstr "Beskrivning (valfritt)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Sökväg" @@ -313,75 +321,66 @@ msgstr "Unik hash med streckkodsdata" msgid "Existing barcode found" msgstr "Befintlig streckkod hittades" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverfel" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Ett fel har loggats av servern." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Bild" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Välj valuta från tillgängliga alternativ" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Ogiltigt värde" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Fjärransluten bild" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL för fjärrbildsfil" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Nedladdning av bilder från fjärr-URL är inte aktiverad" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Kinesiska (Förenklad)" msgid "Chinese (Traditional)" msgstr "Kinesiska (Traditionell)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "Ogiltig fysisk enhet" msgid "Not a valid currency code" msgstr "Inte en giltig valutakod" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Orderstatus" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Föregående tillverkning" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Inkludera varianter" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Inkludera varianter" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Inkludera varianter" msgid "Part" msgstr "Del" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategori" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Tilldelad till" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Skapad före" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Skapad efter" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Har startdatum" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Tillverkningen måste avbrytas innan den kan tas bort" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Valfri" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Spårad" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Testbar" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Allokerad" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Konsumerad" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tillgänglig" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Byggorder" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Plats" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Byggordrar" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Tillverknings order referens" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Tillverknings order referens" msgid "Reference" msgstr "Referens" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Välj del att tillverka" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Försäljningsorderreferens" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Källa Plats" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Välj plats att ta lager från för detta bygge (lämna tomt för att ta från någon lagerplats)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Destinationsplats" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Välj plats där de färdiga objekten kommer att lagras" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Tillverkat antal" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Antal lagerobjekt att bygga" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Slutförda objekt" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Antal lagerposter som har slutförts" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Tillverknings status" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Tillverkning statuskod" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Batchkod" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Batch-kod för denna byggutdata" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Skapad" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Datum för slutförande" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldatum för färdigställande. Tillverkningen kommer att förfallas efter detta datum." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Slutförandedatum" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "slutfört av" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Utfärdad av" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Användare som utfärdade denna tillverknings order" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarig" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Extern länk" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Länk till extern URL" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Projektkod" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Tillverknings order {build} har slutförts" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "En tillverknings order har slutförts" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Ingen byggutgång angiven" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Byggutgång är redan slutförd" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Byggutgång matchar inte bygg order" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Bygg objekt" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Bygg objekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Antal" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Byggobjekt måste ange en byggutgång, eftersom huvuddelen är markerad som spårbar" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Antal måste vara 1 för serialiserat lager" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tilldelad kvantitet ({q}) får inte överstiga tillgängligt lagersaldo ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Lagerposten är överallokerad" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Artikel i lager" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Källa lagervara" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Lagersaldo att allokera för att bygga" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Installera till" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Destination lagervara" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Delnamn" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Bygg utdata" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Byggutdata matchar inte överordnad version" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Ange serienummer för att tillverkade produkter" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "En lista över tillverkade produkter måste anges" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Lagerplats för skrotade produkter" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Ignorera alla lagerallokeringar för skrotade produkter" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Plats för färdiga produkter" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Slutför utfall om lager inte har tilldelats fullt ut" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Ta bort ofullständiga produkter" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Ta bort eventuella produkter som inte har slutförts" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Acceptera att det önskade antalet produkter som inte har slutförts" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Tillverknings ordern är ofullständig" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Spårbar" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Ärvd" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Tillåt varianter" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "Avbruten" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Slutför" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "Är länk" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "Är fil" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Uppdaterad" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "Uppdaterad av" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Unik projektkod" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Projektbeskrivning" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Användare" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Pris" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktiv" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Hemlig" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "Meddelande-ID" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Värd" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Id" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Titel" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Länk" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Sammanfattning" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Läs" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Bildfil" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Definition" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Bilaga" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Saknad fil" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Extern länk saknas" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Modelltyp" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Välj fil att bifoga" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Uppladdningsdatum" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Filstorlek" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logisk nyckel" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Värde" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Etikett" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Färg" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Modell" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Låst" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Källsträng" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Skapad" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Senast uppdaterad" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Parametermall" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Kryssruta" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Val" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Aktiverad" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Mall" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Data" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Streckkodsdata" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Tidsstämpel" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Sammanhang" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Svar" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultat" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "Ett fel inträffade" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "E-postmeddelande" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Bekräftad" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Inget svar" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "Tråd-ID" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "Tråd" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "E-posttrådar" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Nyckel" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Väntande uppgifter" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Schemalagda uppgifter" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Misslyckade uppgifter" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "Uppgifts-ID" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Lås" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Uppgiftsnamn" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Funktion" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Funktionsnamn" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argument" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Filnamn" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Modelltyp" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Ingen grupp" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Omstart krävs" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Serverinstans (Namn)" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Företagsnamn" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Internt företagsnamn" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Bas-URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Bas-URL för serverinstans" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Standardvaluta" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "dagar" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Ladda ner från URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Tillåt nedladdning av bilder och filer från extern URL" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Stöd för streckkoder" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Virtuell" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Delar är virtuella som standard" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Visa relaterade delar" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Visa relaterade delar för en del" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Visningsformat för delnamn" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Formatera för att visa artikelnamnet" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Interna priser" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Aktivera etikettutskrift" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Aktivera etikettutskrift från webbgränssnittet" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "Etikettbild DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Aktivera rapporter" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Aktivera generering av rapporter" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Debugläge" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Sidstorlek" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Standard sidstorlek för PDF-rapporter" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Förhindra produktion från att slutföras tills alla nödvändiga tester är klara" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Aktivera registrering" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Aktivera SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Tillåtna domäner" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Tillverkare" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Företag" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Företag" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Företagsbeskrivning" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Webbplats" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Telefonnummer" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Är kund" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Är leverantör" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Är tillverkare" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Adress" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Adresser" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Välj företag" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Primär adress" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Rad 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Adressrad 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Rad 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Adressrad 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Postnummer" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Land" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Basdel" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Välj del" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Leverantör" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Välj leverantör" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "Företagsnamn" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "I lager" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "Fält" msgid "Column" msgstr "Kolumn" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Radindex" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Fel" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Giltig" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "Ansluten" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Okänd" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Har projektkod" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Skapad av" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Skapad efter" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Intern del" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Slutförd" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "Försäljningsorder" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Startdatum" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldatum" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Mål" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kund" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Skickad" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Leveransdatum" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Kontrollerad av" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Allokeringsmängden måste vara större än noll" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Rad" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopiera parametrar" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Leverantörsnamn" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Streckkod" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "Återbetala" msgid "Reject" msgstr "Avvisa" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Djup" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Har resultat" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Är variant" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Använder" @@ -5750,7 +5793,7 @@ msgstr "Delkategori" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (valfritt)" @@ -5799,7 +5842,7 @@ msgstr "Standardvärde" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Artiklar" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Delnamn" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Är mall" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Variant av" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Nyckelord" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Delkategori" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Revision" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Datum" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Validerad" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Resultat" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Originaldel" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopiera bild" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Kopiera parametrar" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Kopiera test" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategorinamn" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "Revisioner" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Uppdatera" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Hoppa över ogiltiga rader" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serienummer" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "Inga resultat" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Statuskod" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Extern plats" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Uppdaterad efter" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Ägare" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Välj ägare" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Grunddel" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Konverterad till del" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Testresultat" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "Startad" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "Ingen förändring" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "Efternamn på användaren" msgid "Email address of the user" msgstr "Avsändarens E-postadress" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personal" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Har den här användaren behörighet för personal" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Superanvändare" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Är den här användaren en superanvändare" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Är detta användarkonto aktivt" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "Lösenord" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Ditt konto har skapats." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Använd funktionen för lösenordsåterställning för att logga in" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Välkommen till InvenTree" diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po index 91802275ff..ca22e95eaf 100644 --- a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "ไม่พบ API endpoint" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "ปริมาณสินค้าไม่ถูกต้อง" @@ -112,13 +104,13 @@ msgstr "ป้อนวันที่" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "หมายเหตุ" @@ -131,75 +123,91 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "หมายเลขซีเรียลซ้ำกัน" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "ไม่พบหมายเลขซีเรียล" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "การเชื่อมต่อขัดข้อง" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "ไฟล์รูปภาพมีขนาดใหญ่เกินไป" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +215,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "อีเมล" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "ชื่อ" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "คำอธิบาย" msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "" @@ -313,75 +321,66 @@ msgstr "" msgid "Existing barcode found" msgstr "บาร์โค้ดนี้มีในระบบแล้ว" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "เกิดข้อผิดพลาดที่เซิร์ฟเวอร์" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "ต้องเป็นตัวเลข" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "สกุลเงิน" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "สถานที่" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "ออกโดย" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "จำนวนต้องมีค่ามากกว่า 0" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "ยกเลิกแล้ว" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "สำเร็จแล้ว" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "ผู้ใช้งาน" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "ลิงก์" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "ไฟล์แนบ" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "ไม่พบไฟล์" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "เลือกไฟล์ที่ต้องการแนบ" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "ความคิดเห็น" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "ชื่อไฟล์" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "สำเร็จแล้ว" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "สถานะ" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "จัดส่งแล้ว" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "ชิ้นส่วน" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "" -#: users/serializers.py:309 -msgid "Staff" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "ยินดีต้อนรับเข้าสู่ Inventree" diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po index 276ea03d2b..34c90b0a76 100644 --- a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API uç noktası bulunamadı" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Toplu işlem için öge veya filtre listesi sağlanmalıdır" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Ögeler bir liste olarak sağlanmalıdır" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Geçersiz ögeler listesi sağlandı" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Filtreler bir sözlük olarak sağlanmalıdır" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Geçersiz filtreler sağlandı" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Tüm filtre yalnızca true ile kullanılmalıdır" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Sağlanan ölçüte uygun bir eşleşme yok" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Değer verilmemiş" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Bu alan eşsiz olmalı." -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Kullanıcının bu modeli görüntüleme izni yok" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "{original} birimi {unit} birimine dönüştürülemedi" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" @@ -112,13 +104,13 @@ msgstr "Tarih giriniz" msgid "Invalid decimal value" msgstr "Geçersiz ondalık değer" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Notlar" @@ -131,75 +123,91 @@ msgstr "'{name}' değeri desen formatında yer almıyor" msgid "Provided value does not match required pattern: " msgstr "Sağlanan değer gerekli kalıpla eşleşmiyor: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Geçersiz grup: {grup}" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Boş seri numarası dizesi" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Yinelenen seri" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "Geçersiz grup: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Grup aralığı {group}, izin verilen miktarı aşmaktadır ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Seri numarası bulunamadı" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Benzersiz seri numaralarının sayısı ({n}) miktarla eşleşmeli ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Bu değerden HTML etiketlerini kaldır" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Veriler yasaklanmış işaretleme içeriği içeriyor" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Bağlantı hatası" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Sunucu geçersiz durum kodu ile cevap verdi" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "İstisna oluştu" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Sunucu geçersiz Content-Length değeriyle yanıt verdi" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Görsel boyutu çok büyük" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Görsel indirme maksimum boyutu aştı" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Uzak sunucu boş cevap döndü" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "Sağlanan URL geçerli bir görsel dosyası değil" @@ -207,11 +215,11 @@ msgstr "Sağlanan URL geçerli bir görsel dosyası değil" msgid "Log in to the app" msgstr "Uygulamaya giriş yapın" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-posta" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Başka bir şey yapmadan önce iki faktörlü kimlik doğrulamayı etkinleştirme gerekir." @@ -259,18 +267,18 @@ msgstr "Referans sayısı çok fazla" msgid "Invalid choice" msgstr "Geçersiz seçim" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Adı" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Açıklama" msgid "Description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Yol" @@ -313,75 +321,66 @@ msgstr "Barkod verisinin benzersiz hash'i" msgid "Existing barcode found" msgstr "Var olan barkod bulundu" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "Görev Başarısızlığı" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Arka plan çalışan görevi '{f}' {n} denemeden sonra başarısız oldu" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Sunucu Hatası" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Bir hafta sunucu tarafından kayıt edildi." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Görsel" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Para birimi" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Mevcut seçeneklerden para birimini seçin" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "Bu alan boş olamaz." -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Geçersiz değer" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Uzak Görsel" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "Uzak görselin dosya URL'si" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Uzak URL'den görsel indirme etkin değil" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "Uzak URL'den görsel indirilemedi" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "Geçersiz içerik türü biçimi" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "İçerik türü bulunamadı" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "İçerik türü gerekli mixin sınıfı ile eşleşmemektedir" @@ -537,11 +536,11 @@ msgstr "Çince (Basitleştirilmiş)" msgid "Chinese (Traditional)" msgstr "Çince (Geleneksel)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "Güncelleme mevcut" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "InvenTree için güncelleme mevcut" @@ -553,30 +552,30 @@ msgstr "Geçersiz fiziksel birim" msgid "Not a valid currency code" msgstr "Geçerli bir para birimi kodu değil" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Sipariş Durumu" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Üst Yapım İşi" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "Varyantları Dahil Et" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "Varyantları Dahil Et" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "Varyantları Dahil Et" msgid "Part" msgstr "Parça" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategori" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Kök Üretim" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Bana atandı" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Atanılan Kişi" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Daha önce oluşturuldu" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Sonra oluşturuldu" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Başlangıç tarihi var" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Başlangıç tarihi önce" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Başlangıç tarihi sonra" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Hedef tarihi var" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Hedef tarihi önce" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Hedef tarihi sonra" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Daha önce tamamlandı" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Sonra tamamlandı" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "En yakın tarih" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "Maksimum Tarih" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Ağacı Hariç Tut" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Üretim silinemeden önce iptal edilmelidir" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Sarf Malzemesi" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "İsteğe Bağlı" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montaj" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "İzlenen" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Test Edilebilir" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "Sipariş Açık" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Tahsis Edildi" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Tüketildi" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Mevcut" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Siparişte" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Üretim Emri" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Konum" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Çıktı" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Çıktı stok kalemi ID'sine göre filtrele. Takılmamış üretim kalemlerini bulmak için ‘null’ kullan." @@ -748,41 +751,41 @@ msgstr "Çıktı stok kalemi ID'sine göre filtrele. Takılmamış üretim kalem msgid "Build Orders" msgstr "Üretim Emirleri" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Montaj BOM listesi henüz doğrulanmadı" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Pasif bir parça için üretim emri oluşturulamaz" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Kilidi açılmış bir parça için üretim emri oluşturulamaz" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Harici üretim emirleri yalnızca satın alınabilir parçalar için yerine getirilebilir" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Sorumlu kullanıcı veya grup belirtilmelidir" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Üretim emri parçası değiştirilemez" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Hedef tarih başlangıç tarihinden sonra olmalıdır" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Üretim Emri Referansı" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Üretim Emri Referansı" msgid "Reference" msgstr "Referans" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Üretimin kısa açıklaması (isteğe bağlı)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "Bu üretimin tahsis edildiği üretim emri" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Üretilecek parçayı seçin" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Satış Emri Referansı" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "Bu üretimin tahsis edildiği satış siparişi" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Kaynak Konum" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Bu üretim için stok alınacak konumu seçin (herhangi bir stok konumundan amak için boş bırakın)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "Harici Üretim" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Bu üretim emri harici olarak tamamlanmıştır" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Hedef Konum" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Tamamlanmış ögelerin saklanacağı konumu seçiniz" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Üretim Miktarı" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Üretilecek stok kalemlerinin sayısı" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Tamamlanmış ögeler" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Tamamlanan stok kalemlerinin sayısı" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Üretim Durumu" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Üretim durum kodu" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Sıra numarası" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Bu üretim çıktısının parti kodu" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Oluşturulma tarihi" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "Üretim başlangıç tarihi" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Bu üretim emri için planlanan başlangıç tarihi" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Hedef tamamlama tarihi" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Üretimin tamamlanması için hedef tarih. Bu tarihten sonra üretim gecikmiş olacak." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Tamamlama tarihi" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "tamamlayan" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Düzenleyen" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Bu üretim emrini düzenleyen kullanıcı" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Sorumlu" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Bu üretim emrinden sorumlu kullanıcı veya grup" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Harici Bağlantı" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Harici URL'ye bağlantı" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Üretim Önceliği" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Bu üretim emrinin önceliği" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Proje Kodu" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Bu üretim emri için proje kodu" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Açık alt üretim işlemleri varken üretim emri tamamlanamaz" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Eksik çıktılar varken üretim emri tamamlanamaz" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Üretim tahsisatını tamamlamak için boşaltma görevi başarısız oldu" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "{build} üretim emri tamamlandı" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Bir üretim emri tamamlandı" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "İzlenebilir parçalar için seri numaraları sağlanmalıdır" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Hiçbir üretim çıktısı belirtilmedi" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Üretim çıktısı zaten tamamlanmış" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Üretim çıktısı, üretim emri ile eşleşmiyor" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Miktar sıfırdan büyük olmalıdır" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Miktar çıktı miktarından büyük olamaz" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "Üretim çıktısı tüm gerekli testleri geçmedi" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "{serial} üretim çıktısı gerekli testleri geçmedi" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" -msgstr "" +msgstr "Tahsis edilen stok kalemleri hâlâ üretimde" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Tahsisli kalemler içeren bir üretim çıktısı kısmi olarak tamamlanamaz" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Üretim Emri Satırı" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Üretim nesnesi" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Üretim nesnesi" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Miktar" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Üretim emri için gereken miktar" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Tüketilen Stok Miktarı" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Ana parça izlenebilir olarak işaretlendiğinden, üretim kalemi bir üretim çıktısı belirtmelidir" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Seçilen stok kalemi BOM satırı ile eşleşmiyor" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Seri numaralı stok için miktar bir olmalı" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tahsis edilen miktar ({q}) mevcut stok miktarını ({a}) aşmamalıdır" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Stok Kalemi" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Üretime tahsis edilecek stok miktarı" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Kur" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Hedef stok kalemi" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Üretim Seviyesi" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Parça Adı" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Üretim Çıktısı" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Üretim çıktısı üst üretim ile eşleşmiyor" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Çıktı parçası üretim emri parçası ile eşleşmiyor" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Bu üretim çıktısı zaten tamamlandı" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Bu üretim çıktısı tam tahsis edilmedi" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Üretim çıktısının miktarını girin" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "İzlenebilir parçalar için tamsayı miktar gerekir" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ürün ağacı izlenebilir parçalar içerdiğinden tamsayı miktar gereklidir" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Seri Numaraları" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Üretim çıktıları için seri numaraları girin" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Üretim çıktısı için stok konumu" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Seri Numaralarını Otomatik Tahsis Et" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Eşleşen seri numaralı gerekli kalemleri otomatik tahsis et" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Şu seri numaraları zaten varlar veya geçersizler" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Bir üretim çıktıları listesi sağlanmalıdır" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Hurdaya ayrılan çıktılar için stok konumu" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Ayırmaları İptal Et" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Hurdaya ayrılan çıktılar için yapılan tüm stok ayırmalarını iptal et" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Üretim çıktı(larını) hurdaya ayırma nedeni" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Tamamlanan üretim çıktıları içi konum" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Tamamlanmamış Ayırmayı Onayla" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Stok henüz tamamen tahsis edilmemşse çıktıları tamamla" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Tahsis Edilen Stoku Tüket" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Bu üretim için zaten tahsis edilmiş olan tüm stokları tüket" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Tamamlanmamış Çıktıları Kaldır" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Henüz tamamlanmamış tüm üretim çıktılarını sil" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "İzin verilmedi" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Bu üretim emri tarafından tüketildi olarak kabul et" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Bu üretim emrini tamamlamadan önce tahsisi kaldır" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Aşırı Tahsis Edilmiş Stok" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Üretim emrine atanan ek stok kalemlerini nasıl işlemek istersiniz" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Bazı stok kalemleri aşırı tahsis edilmiştir" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Tahsis Edilmeyeni Kabul Et" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Stok kalemlerinin bu üretim emrine tamamen tahsis edilmediğini kabul et" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Tamamlanmamış Kabul et" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Gereken miktarda üretim çıktısının tamamlanmadığını kabul et" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Gereken üretim miktarı tamamlanmadı" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Üretim emrinin açık alt üretim emirleri var" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Üretim emri üretim durumunda olmalıdır" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Üretim emrinde eksik çıktılar var" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Üretim Satırı" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Üretim çıktısı" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Üretim çıktısı aynı üretimi göstermelidir" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Üretim Satırı" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part üretim emri ile aynı parçayı göstermelidir" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Kalem stokta olmalıdır" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Mevcut miktar ({q}) aşıldı" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "İzlenen parçaların tahsisi için üretim çıktısı belirtilmelidir" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "İzlenmeyen parçaların tahsisi için üretim çıktısı belirtilemez" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Ayrılma ögeleri sağlanmalıdır" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Parçaların alınacağı stok konumu (herhangi bir konumdan almak için boş bırakın)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Konumu Hariç Tut" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Bu seçilen konumdan stok kalemlerini hariç tut" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Birbirinin Yerine Kullanılabilir Stok" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Birden fazla konumdaki stok kalemleri birbirinin yerine kullanılabilir" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Yedek Stok" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Yedek parçaların ayrılmasına izin ver" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "İsteğe Bağlı Ögeler" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "İsteğe bağlı BOM kalemlerini üretim emrine tahsis et" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" -msgstr "" +msgstr "Tüm Ögeler" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" -msgstr "" +msgstr "Takip edilmeyen kalemler" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "Takipli Kalemler" #: build/serializers.py:1125 -msgid "Tracked Items" -msgstr "" - -#: build/serializers.py:1127 msgid "Item Type" -msgstr "" +msgstr "Kalem Türü" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" -msgstr "" +msgstr "Otomatik tahsis edilecek ürün tipini seçin" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Otomatik ayırma görevini başlatma başarısız oldu" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "ML Referansı" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "BOM Parça ID" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "ML Parça Adı" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" -msgstr "" +msgstr "Kur" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Yap" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Tedarikçi Parçası" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Tahsis Edilen Miktar" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Üretim Referansı" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Parça Kategorisi Adı" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Takip Edilebilir" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Devralınmış" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Varyantlara İzin Ver" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "ML Ögesi" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Üretimde" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Üretim için Planlandı" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Harici Stok" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Mevcut Stok" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Mevcut Yedek Stok" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Mevcut Varyant Stok" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Tüketilen miktar tahsis edilen miktarı aşıyor" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Stok tüketimi için isteğe bağlı notlar" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "Üretim kalemi doğru üretim emrini göstermelidir" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Üretim kalemi tahsisini yinele" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "Üretim satırı doğru üretim emrini göstermelidir" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Üretim satırı tahsisini yinele" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "En az bir kalem veya satır sağlanmalıdır" @@ -1495,43 +1494,43 @@ msgstr "Beklemede" msgid "Cancelled" msgstr "İptal edildi" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Tamamlandı" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Üretim emri için gereken stok" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Üretim emri {build} ek stok gerektiriyor" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Geciken Üretim Emri" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "{bo} üretim emri şimdi gecikti" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "Link Olanlar" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "Dosya Olanlar" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Kullanıcının bu ekleri silmek için izni yok" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Kullanıcının bu eki silmek için izni yok" @@ -1555,794 +1554,794 @@ msgstr "Eklenti yok" msgid "Project Code Label" msgstr "Proje Kodu Etiketi" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Güncellendi" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Son güncellemenin zaman damgası" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "Güncelleyen" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "Bu nesneyi en son güncelleyen kullanıcı" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Eşsiz proje kodu" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Proje açıklaması" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Bu projeden sorumlu kullanıcı veya grup" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "Ayarlar anahtarı" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Ayarlar değeri" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Seçilen değer geçerli bir seçenek değil" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Değer bir boolean değer olmalıdır" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Değer bir integer değer olmalıdır" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "Değer geçerli bir sayı olmalıdır" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "Değer doğrulama kontrollerini geçemiyor" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Anahtar dizesi benzersiz olmalı" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Kullanıcı" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Fiyat kademesi miktarı" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Fiyat" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Belirtilen miktardaki birim fiyat" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Bitiş Noktası" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Bu web kancasının alındığı uç nokta" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Bu web kancası için ad" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Aktif" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Bu web kancası aktif mi" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Erişim için belirteç" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Gizli" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "HMAC için paylaşılan gizli bilgi" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "Mesaj ID" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Bu mesaj için benzersiz tanımlayıcı" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Sağlayıcı" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Bu mesajın alındığı ana bilgisayar" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Başlık" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Bu mesajın başlığı" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Gövde" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Bu mesajın gövdesi" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Bu mesajın alındığı uç nokta" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Üzerinde çalışıldı" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Bu mesajdaki iş bitirildi mi?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Kimlik" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Başlık" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Bağlantı" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Yayınlandı" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Yazar" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Özet" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Oku" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Haberi okudunuz mu?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Görsel dosyası" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "Bu görsel için hedef model türü" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "Bu görsel için hedef model ID" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "Özel Birim" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "Birim simgesi benzersiz olmalıdır" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Birim adı geçerli bir tanımlayıcı olmalıdır" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Birim adı" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Sembol" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "İsteğe bağlı birim simgesi" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Tanımlama" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Birim tanımlaması" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Ek" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Eksik dosya" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Bozuk dış bağlantı" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "Model türü" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "Görsel için hedef model türü" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Eklenecek dosyayı seç" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Yorum" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "Ek yorumu" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Yükleme tarihi" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Dosyanın yüklendiği tarih" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Dosya Boyutu" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Bayt cinsinden dosya boyutu" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Ek için belirtilen model türü geçersiz" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "Özel Durum" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "Özel Durumlar" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "Referans Durum Seti" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "Bu özel durum ile genişletilen durum seti" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Mantıksal anahtar" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "İş mantığında bu özel duruma eşit olan durum mantıksal anahtarı" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Değer" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "Modeller veritabanına kaydedilecek sayısal değer" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "Durumun adı" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Etiket" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "Ön yüzde gösterilecek etiket" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Renk" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "Ön yüzde gösterilecek renk" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Model" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "Bu durumun ilişkilendirildiği model" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "Model seçilmelidir" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "Anahtar Seçilmelidir" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "Mantıksal anahtar seçilmelidir" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "Anahtar, mantık anahtarından farklı olmalıdır" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "Geçerli bir referans durum sınıfı sağlanmalıdır" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "Anahtar, referans durumunun mantık anahtarlarından farklı olmalıdır" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "Mantık anahtarı, referans durumunun mantık anahtarları içinde olmalıdır" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "İsim, referans durumunun isimlerinden farklı olmalıdır" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Seçim Listesi" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "Seçim Listeleri" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "Seçim listesinin adı" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "Seçim listesinin açıklaması" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Kilitli" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "Bu seçim listesi kilitli mi?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "Bu seçim listesi kullanılabilir mi?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "Kaynak Eklentisi" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "Seçim listesini sağlayan eklenti" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "Kaynak Dize" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "Bu liste için kullanılan kaynağı belirten isteğe bağlı dize" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "Varsayılan Girdi" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "Bu seçim listesi için varsayılan girdi" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Oluşturuldu" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "Seçim listesinin oluşturulduğu tarih ve saat" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Son Güncelleme" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "Seçim listesinin son güncellendiği tarih ve saat" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "Seçim Listesi Girdisi" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "Seçim Listesi Girişleri" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "Bu girdinin ait olduğu seçim listesi" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "Seçim listesi girdisinin değeri" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "Seçim listesi girdisi için etiket" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "Seçim listesi girdisinin açıklaması" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "Bu seçim listesi girdisi aktif mi?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Parametre Şablonu" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "Parametre Şablonları" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Onay kutusu parametrelerinin birimleri olamaz" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Onay kutusu parametrelerinin seçenekleri olamaz" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Seçenekler eşsiz olmalıdır" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Parametre şablon adı benzersiz olmalıdır" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "Bu parametre şablonu için hedef modeli türü" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Parametre Adı" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Birim" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Bu parametre için fiziksel birimler" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Parametre açıklaması" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Onay kutusu" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Bu parametre bir onay kutusu mu?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Seçenekler" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Bu parametre için geçerli seçenekler (virgül ile ayrılmış)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "Bu parametre için seçim listesi" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Etkin" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "Bu parametre şablonu etkin mi?" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "Parametre" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "Parametreler" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Parametre değeri için geçersiz seçim" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "Parametre için belirtilen model türü geçersiz" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "Model ID" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "Bu parametre için hedef modelin ID'si" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Şablon" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "Parametre şablonu" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Veri" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Parametre Değeri" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Not" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "İsteğe bağlı not alanı" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "Barkod Taraması" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "Barkod verisi" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "Barkodu taratan kullanıcı" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "Zaman damgası" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "Barkod taramasının tarihi ve saati" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "Barkodu işleyen URL uç noktası" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Bağlam" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "Barkod taraması için bağlam verisi" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "Yanıt" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "Barkod taramasından gelen yanıt verisi" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Sonuç" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "Barkod taraması başarılı mıydı?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "Bir hata oluştu" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "NVE-ER: E-posta günlüğünün silinmesi korumalı. Silmeye izin vermek için INVENTREE_PROTECT_EMAIL_LOG ayarını False olarak ayarlayın." -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "E-posta İletisi" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "E-posta İletileri" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "Duyuruldu" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "Gönderildi" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "Başarısız" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "Teslim edildi" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "Onaylandı" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "Gelen" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "Giden" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "Yanıt Yok" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "Teslimat Takibi" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "Okumayı Takip Et" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "Tıklamayı Takip Et" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "Bu ileti için tanımlayıcı (harici sistem tarafından sağlanabilir)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "Konu Kimliği" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Bu ileti konusu için tanımlayıcı (harici sistem tarafından sağlanabilir)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "Konu" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "Bu mesaja bağlı konu" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "Öncelik" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "E-Posta Konusu" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "E-posta Konuları" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Anahtar" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "Bu konu için benzersiz anahtar (konuyu tanımlamak için kullanılır)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "Bu konu için benzersiz tanımlayıcı" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "Dahili Olarak Başlatıldı" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "Bu konu dahili olarak mı başlatıldı?" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "Konunun oluşturulduğu tarih ve saat" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "Konunun son güncellendiği tarih ve saat" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} iptal edildi" msgid "A order that is assigned to you was canceled" msgstr "Size atanmış bir emir iptal edildi" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Teslim Alınan Kalemler" @@ -2392,1235 +2391,1243 @@ msgstr "Ayarın bir ortam değişkeni tarafından üstüne yazılıp yazılmadı msgid "Override" msgstr "Üstüne Yaz" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Çalışıyor" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Bekleyen Görevler" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Planlanan Görevler" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Başarısız Görevler" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "Görev ID" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Benzersiz Görev ID" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Kilit" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Kilit Zamanı" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Görev Adı" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Fonksiyon" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Fonksiyon Adı" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argümanlar" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Görev Argümanları" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Anahtar Argümanlar" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Anahtar görev argümanları" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Dosya adı" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Model Tipi" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Kullanıcının bu model için ek oluşturma veya düzenleme izni yok" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "Kullanıcı bu model için parametre oluşturma veya düzenleme iznine sahip değil" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Seçim listesi kilitli" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Grup yok" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "Site URL'si yapılandırma tarafından kilitlendi" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Yeniden başlatma gerekli" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Sunucunun yeniden başlatılmasını gerektiren bir ayar değişti" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Bekleyen taşıma işlemleri" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Bekleyen veritabanı taşıma sayısı" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "Aktif uyarı kodları" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "Aktif uyarı kodlarının bir sözlüğü" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "Örnek ID" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "Bu InvenTree örneği için benzersiz tanımlayıcı" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "Duyuru ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Sunucu durum bilgisinde sunucu ID'sini göster (oturum açılmadan)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Sunucu Örneği adı" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Sunucu örneği için sözce (string) açıklayıcı" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Örnek adını kullan" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Örnek adını başlık çubuğunda kullan" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "`Hakkında` gösterimini kısıtla" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "`Hakkında` kipini yalnızca süper kullanıcılara göster" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Şirket adı" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Dahili şirket adı" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "Ana URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "Sunucu örneğinn temel URL'i" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Varsayılan Para Birimi" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Fiyat hesaplamaları için temel para birimini seçin" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "Desteklenen Para Birimleri" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "Desteklenen para birimi kodlarının listesi" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Para Birimi Güncelleme Aralığı" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Döviz kurlarını şu sıklıkla güncelle (etkisizleştirmek için sıfır yapın)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "günler" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Para Birimi Güncelleme Eklentisi" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Kullanılacak para birimi güncelleme eklentisi" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "URL'den indir" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Harici URL'den uzak görseller ve dosyalar indirmeye izin ver" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "İndirme Boyutu Sınırı" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Uzak görsel için izin verilebilir maksimum indirme boyutu" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "URL'den indirmek için kullanılan kullanıcı aracısı" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Harici URL'lerden görsel ve dosya indirirken kullanılan kullanıcı aracısının (user-agent) değiştirilmesine izin ver (varsayılan için boş bırakın)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "Sıkı URL Doğrulama" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "URL'leri doğrularken şema tanımlamasını gerekli kıl" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Güncelleme Kontrol Aralığı" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Güncellemeleri şu sıklıkla kontrol et (etkisizleştirmek için sıfır yapın)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Otomatik Yedekleme" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Veritabanı ve ortam dosyalarını otomatik yedeklemeyi etkinleştir" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Otomatik Yedekleme Aralığı" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Otomatik yedekleme olayları arasındaki gün sayısını belirtin" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Görev Silme Aralığı" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Arkaplan görev sonuçları belirtilen gün sayısı kadar sonra silinecektir" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Hata Günlüğü Silme Aralığı" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Hata günlükleri belirtilen gün sayısı kadar sonra silinecektir" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Bildirim Silme Aralığı" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Kullanıcı bildirimleri belirtilen gün sayısı kadar sonra silinecektir" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "E-posta Silme Aralığı" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "E-postalar belirtilen gün sayısı sonrasında silinecektir" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "E-posta Kaydını Koru" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "E-posta kayıt girdilerinin silinmesini engelle" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Barkod Desteği" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Web arayüzünde barkod tarayıcı desteğini etkinleştir" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "Barkod Sonuçlarını Depola" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "Barkod tarama sonuçlarını veritabanına depola" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "Maksimum Barkod Tarama Sayısı" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "Depolanacak maksimum barkod tarama sonuçları sayısı" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Barkod Girdi Gecikmesi" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Barkod girdi işleme gecikme süresi" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Barkod Web Kamerası Desteği" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Tarayıcıda web kamerası aracılığıyla barkod taramaya izin ver" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "Barkod Verisini Göster" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "Barkod verisini tarayıcıda metin olarak görüntüle" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "Barkod Üreteci Eklentisi" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "Dahili barkod üretimi için kullanılacak eklenti" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Parça Revizyonları" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Parça için revizyon alanını etkinleştir" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "Yalnızca Montaj Revizyonu" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "Yalnızca montaj parçaları için revizyona izin ver" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "Montajdan Silmeye İzin Ver" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "Bir montajda kullanılan parçaları silmeye izin ver" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "DPN Regex" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Parça DPN eşleştirmesi için Düzenli İfade Kalıbı (Regex)" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Yinelenen DPN'ye İzin Ver" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Birden çok parçanın aynı DPN'yi paylaşmasına izin ver" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "DPN Düzenlemeye İzin Ver" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Parçayı düzenlerken DPN değiştirmeye izin ver" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Parça ML Verisini Kopyala" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Bir parçayo çoğaltırken varsayılan olarak ML verisini kopyala" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Parça Parametre Verisini Kopyala" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Bir parçayı çoğaltırken varsayılan olarak parametre verisini kopyala" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Parça Test Verisini Kopyala" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Bir parçayı çoğaltırken varsayılan olarak test verisini kopyala" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Kategori Paremetre Sablonu Kopyala" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Parçaları varsayılan olan şablondur" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Bileşen" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Parçalar varsayılan olarak alt bileşen olarak kullanılabilir" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Satın Alınabilir" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Satılabilir" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Parçalar varsayılan olarak satılabilir" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Parçalar varsayılan olarak takip edilebilir" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Sanal" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Parçalar varsayılan olarak sanaldır" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "İlgili parçaları göster" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Bir parça için ilgili parçaları görüntüle" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Başlangıç Stok Verisi" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Yeni bir parça eklerken başlangıç stoku oluşturmaya izin ver" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "İlk Tedarikçi Bilgileri" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Yeni bir parça eklerken ilk tedarikçi bilgilerinin oluşturulmasına izin ver" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Parça Adı Görüntüleme Biçimi" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Parça adını görüntüleme biçimi" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Parça Kategorisi Varsayılan Simgesi" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Parça kategorisi için varsayılan simge (boş bırakılırsa simge kullanılmaz)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Minimum Fiyatlandırma Ondalık Basamakları" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Fiyat verilerinde görüntülenecek maksimum ondalık hane sayısı" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Maksimum Fiyatlandırma Ondalık Basamakları" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Fiyat verilerinde görüntülenecek maksimum ondalık hane sayısı" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Tedarikçi Fiyatlandırmasını Kullan" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Tedarikçi fiyat kademelerini genel fiyat hesaplamalarına dahil et" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Satın Alma Geçmişini Geçersiz Kılma" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Tarihsel satın alma siparişi fiyatlandırması, tedarikçi fiyat kademelerini geçersiz kılar" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Stok Kalemi Fiyatlandırmasını Kullan" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Fiyatlandırma hesaplamaları için elle girilen stok verisinin fiyatlandırmasını kullan" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Stok Kalemi Fiyatlandırma Süresi" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Bu gün sayısından daha eski olan stok kalemlerini fiyatlandırma hesaplamalarından hariç tut" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Varyant Fiyatlandırması Kullan" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Genel fiyat hesaplamalarına varyant fiyatlarını dahil et" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Yalnızca Aktif Varyantlar" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Varyant fiyatlandırmasını hesaplamak için yalnızca aktif varyant parçaları kullan" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "Fiyatlandırmayı Otomatik Güncelle" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "Dahili veri değişince parça fiyatını otomatik güncelle" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Fiyatlandırmayı Yeniden Oluşturma Aralığı" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Parça fiyatlandrımasının otomatik güncellenmesinden önceki gün sayısı" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Dahili Fiyatlar" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Parçalar için dahili fiyatları etkinleştir" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Dahili Fiyat Geçersiz Kılma" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Varsa, dahili fiyatlar fiyat aralığı hesaplarını geçersiz kılar" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "Malzeme listesinde sıfır miktara izin ver" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "Malzeme listesinde bir ürün için sıfır miktarın kabul edilmesini sağlar. Böylece üretim miktarından bağımsız olarak, her üretim için gerekli miktarı belirlemek amacıyla kurulum miktarı kullanılabilir" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Etiket yazdırmayı etkinleştir" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Web arayüzünden etiket yazdırmayı etkinleştir" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "Etiket Görseli DPI Değeri" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Görsel dosyaları üretirken etiket yazdırma eklentilerine sağlanacak DPI çözünürlüğü" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Raporları Etkinleştir" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Rapor üretimini etkinleştir" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Hata Ayıklama Modu" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Raporları hata ayıklama modunda oluştur (HTML çıktısı)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "Rapor Hatalarını Günlüğe Kaydet" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "Raporlar üretirken oluşan hataları günlüğe kaydet" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Sayfa Boyutu" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "PDF raporlar için varsayılan sayfa boyutu" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Parametre Birimlerini Zorunlu Kıl" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Birimler sağlanırsa, parametre değerleri belirtilen birimlere uymalıdır" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Küresel Çapta Benzersiz Seri Numaraları" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Stok kalemleri için seri numaraları küresel çapta benzersiz olmalıdır" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Tükenen Stoku Sil" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "Bir stok kalemi tükendiğinde varsayılan davranışı belirler" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Parti Kodu Şablonu" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Stok kalemleri için varsayılan parti kodları oluşturma şablonu" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Stok Sona Erme Tarihi" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Stokun sona erme işlevselliğini etkinleştir" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Süresi Dolan Stoku Sat" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Süresi dolan stok satışına izin ver" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Stok Eskime Süresi" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Stok kalemlerinin son kullanma tarihinden önce eskimiş sayılacağı gün sayısı" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Süresi Dolmuş Stoktan Üretim" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Süresi dolmuş stok ile üretime izin ver" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Stok Sahipliği Kontrolü" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Stok konumu ve kalemleri üzerinde sahiplik kontrolünü etkinleştir" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Varsayılan Stok Konumu Simgesi" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Stok konumu için varsayılan simge (boşsa simge yok demektir)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Takılı Stok Kalemlerini Göster" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Stok tablolarında takılı stok kalemlerini görüntüle" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "Kalemlerin kurulumunu yaparken BOM'u kontrol et" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Takılı stok kalemleri üst parçanın BOM listesinde mevcut olmalıdır" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "Stok Dışı Aktarıma İzin Ver" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Stokta olmayan kalemlerin stok konumları arasında aktarılmasına izin ver" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Üretim Emri Referans Şablonu" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Üretim emri referans alanını üretmek için gerekli şablon" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "Sorumlu Sahip Gerektir" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "Her siparişe sorumlu bir yetkili atanmalıdır." -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "Aktif Parça Gerektirir" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "Pasif parçalarla üretim emri oluşturmayı engelle" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "Kilitli Parça Gerekli" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "Kilidi açılmış parçalarla üretim emri oluşturmayı engelle" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "Geçerli BOM gereklidir." -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "BOM henüz doğrulanmadan üretim emri oluşturmayı engelle" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "Kapalı Alt Siparişler Gerekli" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "Tüm alt emirler kapatılana kadar üretim emrini tamamlamayı engelle" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "Harici Üretim Emirleri" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "Harici üretim emri işlevselliğini etkinleştir" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "Testler Geçene Kadar Engelle" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Tüm gerekli testler geçene kadar üretim çıktılarını tamamlamayı engelle" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "İade Siparişlerini Etkinleştir" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Kullanıcı arayüzünde iade siparişi işlevselliğini etkinleştir" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Kullanıcı arayüzünde iade siparişi işlevselliğini etkinleştirin." -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "İade Sipariş referans alanı oluşturmak için gerekli desen" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Tamamlanan İade Siparişlerini Düzenle" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Tamamlandıktan sonra iade siparişlerini düzenlemeye izin ver" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Satış Siparişi Referans Şablonu" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Satış Siparişi referans alanını üretmek için gerekli şablon" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Satış Siparişi Varsayılan Gönderi" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Satış siparişleriyle varsayılan gönderi oluşturmayı etkinleştir" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Tamamlanmış Satış Siparişlerini Düzenle" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Gönderilen veya tamamlanan satış siparişlerini düzenlemeye izin ver" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "Kontrol Gerektiren Gönderi" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "Kalemler kontrol edilene dek gönderilerin tamamlanmasını engelle" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "Gönderilen Siparişleri Tamamlandı Olarak İmle" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Gönderildi olarak işaretli satış siparişleri \"gönderildi\" durumu atlanarak otomatik olarak tamamlanacaktır" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Satın Alma Siparişi Referans Şablonu" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Satın Alma Siparişi referans alanını üretmek için gerekli şablon" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Tamamlanan Satın Alma Siparişlerini Düzenle" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Gönderildikten veya tamamlandıktan sonra satın alma siparişlerini düzenlemeye izin ver" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "Para Birimini Dönüştür" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "Stok alınırken kalem değerini temel para birimine dönüştür" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Satın Alma Siparişlerini Otomatik Tamamla" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Tüm satırlar alındığında satın alma siparişini otomatikmen tamamlandı olarak işaretle" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Şifremi unuttum seçeneğini etkinleştir" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Giriş yapma sayfasında şifremi unuttum işlevini etkinleştir" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Kayıt olmayı etkinleştir" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Giriş yapma sayfalarında kullanıcılar için kendini kaydetme işlevini etkinleştir" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "SSO Etkinleştir" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Kullanıcı girişi sayfalarında SSO etkinleştir" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "SSO ile kayıt olmayı etkinleştir" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Giriş yapma sayfalarında kullanıcılar için SSO ile kendini kaydetmeyi etkinleştir" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "SSO grup eşitlemeyi etkinleştir" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "InvenTree gruplarını IdP tarafından sağlanan gruplar ile eşitlemeyi etkinleştir" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "SSO grup anahtarı" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "IdP tarafından sağlanan talep özniteliğinin adı" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "SSO grup haritası" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "SSO gruplarından yerel InvenTree gruplarına bir eşleme. Yerel grup yoksa, oluşturulacaktır." -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "SSO dışındaki grupları kaldır" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "IdP arka ucu tarafından olmayan, kullanıcıya atanmış grupların kaldırılıp kaldırılmayacağı. Bu ayarı etkisizleştirmek güvenlik sorunlarına neden olabilir" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "E-posta Gerekir" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Üyelik sırasında kullanıcının eposta sağlamasını gerektir" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "SSO kullanıcıları otomatik doldur" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Kullanıcı ayrıntılarını TOA hesabı verisinden otomatik olarak doldur" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Postayı iki kez gir" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Hesap oluştururken kullanıcıların postalarını iki kez girmelerini iste" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Şifreyi iki kez gir" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Hesap oluştururken kullanıcıların şifrelerini iki kez girmesini iste" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Alanlara izin ver" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Belirli alanlara hesap açmayı kısıtla (virgülle ayrılmış, @ ile başlayan)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Hesap oluştururken grup" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Yeni kullanıcıların kayıt sırasında atanacağı grup. Eğer TOA grup eşitlemesi etkinse, yalnızca ıdP'den hiçbir grup atanamazsa bu grup ayarlanır." -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "ÇFKD'yi Zorunlu Kıl" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Kullanıcıların çok faktörlü kimlik doğrulamasını kullanması gerekmektedir." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Bu ayarı etkinleştirmek, tüm kullanıcıların çok faktörlü kimlik doğrulamayı ayarlamasını gerektirecektir. Tüm oturumlar hemen kapatılacaktır." -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Başlangıçta eklentileri kontrol et" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Başlangıçta tüm eklentilerin kurulmuş olduğunu kontrol et - konteyner ortamlarında etkinleştir" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Eklenti güncellemelerini kontrol et" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "Kurulu eklentiler için periyodik güncelleme kontrolünü etkinleştir" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "URL entegrasyonunu etkinleştir" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "URL yönlendirmesi eklemek için eklentileri etkinleştir" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Gezinti entegrasyonunu etkinleştir" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Eklentilerin gezintiye entegre edilmesini etkinleştir" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Uygulama entegrasyonunu etkinleştir" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Uygulamalar eklemek için eklentileri etkinleştir" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Zamanlama entegrasyonunu etkinleştir" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Zamanlanmış görevleri çalıştırmak için eklentileri etkinleştir" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Olay entegrasyonunu etkinleştir" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Eklentilerin olaylara yanıt verebilmesini etkinleştirin" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "Arayüz entegrasyonunu etkinleştir" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "Eklentilerin kullanıcı arayüzüne entegre olmasını etkinleştir" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "Posta entegrasyonunu etkinleştir" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Eklentilerin giden/gelen postaları işlemesini etkinleştir" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "Proje kodlarını etkinleştir" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "Projeleri izlemek için proje kodlarını etkinleştir" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" -msgstr "" +msgstr "Stok Sayımını Etkinleştir" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "Geçmiş stok seviyelerini ve değerini kaydetme işlevini etkinleştir" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Harici Konumları Hariç Tut" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" +msgstr "Harici konumlardaki stok kalemlerini stok geçmişi hesaplamalarının dışında tut" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Otomatik Stok Sayımı Periyodu" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" -msgstr "" +msgstr "Otomatik stok geçmişi kaydı arasındaki gün sayısı" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" -msgstr "" +msgstr "Eski Stok Geçmişi Girdilerini Sil" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1133 -msgid "Stocktake Deletion Interval" -msgstr "" - -#: common/setting/system.py:1135 -msgid "Stocktake entries will be deleted after specified number of days" -msgstr "" +msgstr "Belirtilen gün sayısından daha eski stok geçmişi girdilerini sil" #: common/setting/system.py:1142 -msgid "Delete Old Stock Tracking Entries" -msgstr "" +msgid "Stocktake Deletion Interval" +msgstr "Stok Geçmişi Silme Aralığı" #: common/setting/system.py:1144 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "Stok geçmişi girdileri belirtilen gün sayısı sonrasında silinecektir" + +#: common/setting/system.py:1151 +msgid "Delete Old Stock Tracking Entries" +msgstr "Eski Stok Geçmişi Girdilerini Sil" + +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1150 -msgid "Stock Tracking Deletion Interval" -msgstr "" - -#: common/setting/system.py:1152 -msgid "Stock tracking entries will be deleted after specified number of days" -msgstr "" +msgstr "Belirtilen gün sayısından daha eski stok geçmişi girdilerini sil" #: common/setting/system.py:1159 +msgid "Stock Tracking Deletion Interval" +msgstr "Stok Geçmişi Silme Aralığı" + +#: common/setting/system.py:1161 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "Stok geçmişi girdileri belirtilen gün sayısı sonrasında silinecektir" + +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Kullancıların tam isimlerini görüntüle" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Kullanıcı adı yerine kullanıcıların tam adlarını görüntüle" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "Kullanıcı Profillerini Göster" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "Kullanıcıların Profillerini kendi profil sayfalarında göster" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "Test İstasyon Verisini Etkinleştir" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "Test sonuçları için test istasyonundan veri toplamayı etkinleştir" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "Makine Pingini Etkinleştir" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Durumlarını kontrol etmek için kayıtlı makinelerin periyodik ping görevini etkinleştir" @@ -3965,346 +3972,346 @@ msgstr "Parça Aktif" msgid "Manufacturer is Active" msgstr "Üretici Aktif" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "Tedarikçi Parçası Aktif" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" -msgstr "" +msgstr "Ana Tedarikçi Parçası" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "Dahili Parça Aktif" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "Tedarikçi Aktif" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Üretici" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Şirket" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "Stoku Var" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Şirketler" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Şirket açıklaması" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Şirketin açıklaması" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "İnternet Sitesi" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "Şirketin web sitesi" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Telefon numarası" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "İletişim telefon numarası" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "İletişim e-posta adresi" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "İletişim" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "İlgili kişi" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Harici şirket bilgisine bağlantı" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "Bu şirket aktif mi?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "Müşteri sitesi" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Bu şirkete ürün satıyor musunuz?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "Tedarikçi mi" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Bu şirketten ürün satın alıyor musunuz?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Üretici mi" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Bu şirket parça üretiyor mu?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Bu şirket için varsayılan para birimi" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "Vergi Numarası" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "Şirket Vergi Numarası" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Adres" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Adres" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Şirket Seç" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Adres Adı" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Adres girdisini açıklayan başlık" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Birincil Adres" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Birincil adres olarak ayarla" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "1. Satır" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "1. Adres Satırı" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "2. Satır" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "2. Adres Satırı" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Posta Kodu" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Şehir/Bölge" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Posta kodu şehir/bölge" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Eyalet/İlçe" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Eyalet veya ilçe" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Ülke" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Adres ülkesi" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Sevkiyat taşıyıcısı için notlar" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Sevkiyat taşıyıcısı için notlar" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Dahili sevkiyet notları" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Dahili kullanım için sevkiyat notları" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Adres bilgisine bağlantı (harici)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Üretici Parçası" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Temel Parça" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Parça seçin" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Üretici seçin" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "ÜPN" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Üretici Parça Numarası" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "Harici üretici bağlantısı için URL" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Parça üreticisi açıklaması" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Paket birimleri, temel parça birimleriyle uyumlu olmalıdır" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Paket birimleri sıfırdan büyük olmalıdır" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Bağlantılı üretici parçası aynı temel parçayı referans almalıdır" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Tedarikçi" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Tedarikçi seçin" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Tedarikçi stok kodu" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Bu tedarikçi parçası aktif mi?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" -msgstr "" +msgstr "Ana" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" -msgstr "" +msgstr "Bu, bağlı parça için birincil tedarikçi ürünü mü?" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Parça üreticisi seç" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "Harici tedarikçi parçası bağlantısı için URL" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Tedarikçi parçası açıklaması" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "temel maliyet" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum ücret (örneğin stoklama ücreti)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Paketleme" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Parça paketleme" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Paket Miktarı" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Tek bir pakette tedarik edilen toplam miktar. Tekli ürünler için boş bırakın." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "çoklu" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Birden fazla sipariş ver" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Tedarikçiden temin edilebilir miktar" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Temin Edilebilir Miktar Güncellendi" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Temin edilebilirlik verisinin güncellendiği son tarih" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Tedarikçi Fiyat Kademesi" @@ -4316,7 +4323,7 @@ msgstr "Bu tedarikçi için kullanılan varsayılan para birimi" msgid "Company Name" msgstr "Şirket Adı" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Stokta" @@ -4452,7 +4459,7 @@ msgstr "Alan hedef modelde bulunmuyor" msgid "Selected field is read-only" msgstr "Seçilen alan salt okunurdur" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Oturumu İçe Aktar" @@ -4464,31 +4471,31 @@ msgstr "Alan" msgid "Column" msgstr "Sütun" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "Satır İndeksi" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "Orijinal satır verisi" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Hatalar" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Geçerli" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "Mevcut kayıtları güncellemek için ID gereklidir." -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Sağlanan ID ile kayıt bulunamadı" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Sağlanan ID biçimi geçersiz" @@ -4588,7 +4595,7 @@ msgstr "Her etiket için yazdırılacak kopya sayısı" msgid "Connected" msgstr "Bağlı" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Bilinmeyen" @@ -4716,105 +4723,117 @@ msgstr "Maksimum İlerleme" msgid "Maximum value for progress type, required if type=progress" msgstr "İlerleme türünün maksimum değeri, tür=ilerleme ise gerekli" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Sipariş Referansı" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "Açık" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "Proje Kodu Var" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Oluşturan" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "Öncesinde Oluşturuldu" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "Sonrasında Oluşturuldu" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "Başlangıç Tarihi Var" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "Öncesi Başlangıç Tarihi" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "Sonrası Başlangıç Tarihi" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "Hedef Tarihi Var" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "Öncesi Hedef Tarih" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "Sonrası Hedef Tarih" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "Daha önce güncellendi" + +#: order/api.py:234 +msgid "Updated After" +msgstr "Güncellendi (den sonra)" + +#: order/api.py:285 msgid "Has Pricing" msgstr "Fiyatlandırılmış" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "Öncesinde Tamamlandı" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "Sonrasında Tamamlandı" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "Harici Üretim Emri" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Sipariş" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "Sipariş Tamamlandı" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Dahili Parça" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "Sipariş Bekliyor" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Tamamlandı" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "Sevkiyatı Var" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Satın Alma Siparişi" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Satın Alma Siparişi" msgid "Sales Order" msgstr "Satış Siparişi" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Toplam Fiyat" msgid "Total price for this order" msgstr "Bu sipariş için toplam fiyat" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Sipariş Para Birimi" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Bu sipariş için para birimi (şirket varsayılanını kullanmak için boş bırakın)" @@ -4851,718 +4870,742 @@ msgstr "Bu sipariş için para birimi (şirket varsayılanını kullanmak için msgid "This order is locked and cannot be modified" msgstr "Bu sipariş kilitli olduğundan değiştirilemez" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "İletişim bilgileri seçilen şirketle eşleşmiyor" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Başlangıç tarihi hedef tarihinden önce olmalıdır" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "Adres bilgileri seçilen şirketle eşleşmiyor" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Bu sipariş için proje kodu seçin" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Harici sayfaya bağlantı" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "Başlangıç ​​tarihi" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Bu üretim emri için planlanan başlangıç tarihi" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Hedeflenen tarih" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Sipariş teslimatı için beklenen tarih. Bu tarihten sonra sipariş gecikmeli olacaktır." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Düzenleme Tarihi" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Siparişin düzenlendiği tarih" #: order/models.py:506 +msgid "Updated At" +msgstr "Güncellenme Tarihi" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Bu siparişten sorumlu kullanıcı veya grup" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Bu sipariş için ilgili kişi" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Bu sipariş için şirket adresi" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Sipariş referansı" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Durum" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Satın alma siparişi durumu" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Ürünlerin sipariş edilmekte olduğu şirket" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Tedarikçi Referansı" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Tedarikçi siparişi referans kodu" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "teslim alan" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Siparişin tamamlandığı tarih" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Hedef" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "Teslim alınan kalemler için varış yeri" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Parça tedarikçisi PO tedarikçisi ile eşleşmelidir" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Satır, satın alma siparişi ile eşleşmiyor" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Satırda bağlantılı bir parça eksik" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Miktar pozitif bir sayı olmalıdır" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Müşteri" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Ürünlerin satılmakta olduğu şirket" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "Satış siparişi durumu" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Müşteri Referansı " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Müşteri siparişi referans kodu" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Sevkiyat Tarihi" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "tarafından sevk edildi" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "Sipariş zaten tamamlandı" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "Sipariş zaten iptal edildi" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Yalnızca açık siparişler tamamlandı olarak işaretlenebilir" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Tamamlanmamış sevkiyatlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Tamamlanmamış tahsisatlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "Tamamlanmamış satırlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "Bu sipariş kilitli olduğundan değiştirilemez" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Kalem miktarı" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Satır referansı" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Satır notları" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Bu satır için hedef tarih (siparişin hedef tarihini kullanmak için boş bırakın)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Satır açıklaması (isteğe bağlı)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Bu satır için ek bağlam" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Birim Fiyat" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "Satın Alma Siparişi Kalemi" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "Tedarikçi parçası tedarikçi ile eşleşmelidir" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "Üretim emri harici olarak işaretlenmelidir" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "Üretim emirleri yalnızca montaj parçalarına bağlanabilir" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "Üretim emri parçası satır parçası ile eşleşmelidir" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Tedarikçi parçası" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Teslim Alındı" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Teslim alınan miktar" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Alış Fiyatı" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Birim alış fiyatı" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "Bu kalem tarafından karşılanacak harici Üretim Emri" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "Ek Sipariş Kalemi" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "Satış Siparişi Kalemi" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Yalnızca satışa uygun parçalar bir satış siparişine atanabilir" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Satış Fiyatı" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Birim satış fiyatı" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Sevk edildi" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Sevk edilen miktar" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "Satış Siparişi Sevkiyatı" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "Sevk adresi müşteri ile eşleşmelidir" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "Bu sevkiyatın sevk adresi" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Sevkiyat tarihi" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Teslimat Tarihi" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Sevkiyatın teslimat tarihi" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Kontrol Eden" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Bu sevkiyatı kontrol eden kullanıcılar" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Sevkiyat" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Sevkiyat numarası" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Takip Numarası" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Sevkiyat takip numarası" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Fatura Numarası" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Fatura referans numarası" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Sevkiyat zaten sevk edildi" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Sevkiyatın tahsis edilen stok kalemleri bulunmuyor" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "Sevkiyat tamamlanmadan önce kontrol edilmelidir" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "Ek Sipariş Kalemi" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "Satış Siparişi Tahsisatı" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "Stok kalemi henüz atanmadı" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Farklı bir parçaya sahip satıra stok kalemi tahsis edilemez" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Parça içermeyen bir satıra stok tahsis edilemez" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tahsis miktarı stok miktarını aşamaz" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar 1 olmalıdır" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Satış siparişi sevkiyatla eşleşmiyor" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Sevkiyat satış siparişiyle eşleşmiyor" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Satır" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Satış siparişinin sevkiyat referansı" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Kalem" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Tahsis edilecek stok kalemini seçin" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Stok tahsis miktarını girin" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "İade Siparişi referansı" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Ürünlerin iade edildiği şirket" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "İade siparişi durumu" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "İade Siparişi Satırı" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "Stok kalemi belirtilmelidir" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "İade miktarı stok miktarını aşıyor" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "İade miktarı sıfırdan büyük olmalıdır" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "Seri numaralı stok kalemi için geçersiz miktar" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Müşteriden iade edilecek ürünü seçin" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Teslim Alma Tarihi" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "Bu iade kaleminin teslim alındığı tarih" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Sonuç" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Bu satırın sonucu" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Bu kalem için iade veya onarımla ilgili maliyet" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "Ek Sipariş Kalemi" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "Sipariş ID" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "Kopyası oluşturulacak siparişin ID'si" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Satırları Kopyala" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Satırları orijinal siparişten kopyala" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Ek Kalemleri Kopyala" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Orijinal siparişten ek kalemleri kopyala" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Parametreleri Kopyala" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "Parametreleri orijinal siparişten kopyala" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Satırlar" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Tamamlanan Satırlar" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Siparişin Kopyasını Oluştur" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Bu siparişin kopyasını oluşturmak için seçenekleri belirtin" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Geçersiz sipariş ID" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Tedarikçi Adı" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Sipariş iptal edilemez" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Satır eksiği olan siparişin kapatılmasına izin ver" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "Siparişin eksik satırları var" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "Sipariş açık değil" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "Otomatik Fiyatlandırma" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Tedarikçi parça verilerine göre satın alma fiyatını otomatik olarak hesapla" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Satın alma fiyatı para birimi" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "Kalemleri Birleştir" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Aynı parça, hedef ve hedef tarihe sahip kalemleri tek bir satırda birleştir" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Dahili Parça Numarası" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "Dahili Parça Adı" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Tedarikçi parçası belirtilmeli" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Satın alma siparişi belirtilmeli" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Tedarikçi satın alma siparişi ile eşleşmelidir" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Satın alma siparişi tedarikçi ile eşleşmelidir" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Satır" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Teslim alınan kalemler için varış konumunu seçin" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Gelen stok kalemleri için parti numarası girin" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Son Kullanma Tarihi" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "Gelen stok kalemleri için son kullanma tarihi girin" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Gelen stok kalemlerinin seri numaralarını girin" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "Gelen stok kalemlerinin paketleme bilgilerini geçersiz kıl" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "Gelen stok kalemleri için ek not" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Barkod" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Taranan barkod" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Barkod zaten kullanımda" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Satırlar sağlanmalıdır" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Hedef konum belirtilmelidir" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Sağlanan barkod değerleri benzersiz olmalıdır" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "Sevkiyatlar" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Tamamlanan Sevkiyatlar" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" -msgstr "" +msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Satış para birimi" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Sevkiyat bilgileri sağlanmadı" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Ürün kalemi bu siparişle ilişkilendirilmemiştir" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Miktar pozitif olmalıdır" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Tahsis edilecek seri numaralarını girin" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "Sevkiyat zaten sevk edildi" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "Sevkiyat bu sipariş ile ilişkilendirilmemiştir" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Şu seri numaraları için bir eşleşme bulunamadı" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "Şu seri numaraları mevcut değildir" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "İade siparişi kalemi" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Ürün kalemi iade siparişi ile eşleşmiyor" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Ürün kalemi zaten teslim alındı" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Ürün kalemleri yalnızca işlemdeki siparişlere istinaden teslim alınabilir" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "İade olacak miktar" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Satır para birimi" @@ -5598,146 +5641,146 @@ msgstr "Geri öde" msgid "Reject" msgstr "Reddet" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Geciken Satın Alma Siparişi" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Satın alma siparişi {po} şimdi gecikti" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Geciken Satış Siparişi" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Satış siparişi {so} şimdi gecikti" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Gecikmiş İade Siparişi" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "İade siparişi {ro} şimdi gecikti" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Yıldızlı" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Yıldızlı kategorilere göre filtrele" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Derinlik" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Kategori derinliğine göre filtrele" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Üst Seviye" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Üst seviye kategorilere göre filtrele" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Kademeli" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Filtrelenmiş sonuçlara alt kategorileri dahil et" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Üst" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Üst kategoriye göre filtrele" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Belirtilen kategorideki alt kategorileri hariç tut" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Sonuçları Olanlar" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Varyant mı" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Revizyon mu" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Revizyonu Olanlar" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "BOM Geçerli" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Kategorileri Kademele" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Etkin ise, verilen kategorinin alt kategorilerindeki ögeleri dahil et" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Sayısal kategori ID veya 'null' sabitine göre filtrele" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" -msgstr "" +msgstr "Montaj parçası etkin" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" -msgstr "" +msgstr "Montaj parçası takip edilebilir" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Montaj test edilebilir" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" -msgstr "" +msgstr "Bileşen etkin" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" -msgstr "" +msgstr "Bileşen takip edilebilir" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "Bileşen test edilebilir" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" -msgstr "" +msgstr "Bileşen bir montaj parçası" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" -msgstr "" +msgstr "Bileşen sanal" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" -msgstr "" +msgstr "Stok mevcut" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "Kullanımlar" @@ -5750,7 +5793,7 @@ msgstr "Parça Kategorisi" msgid "Part Categories" msgstr "Parça Kategorileri" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Varsayılan Konum" @@ -5778,7 +5821,7 @@ msgstr "Bu kategoridaki parçalar için varsayılan anahtar kelimeler" msgid "Icon" msgstr "Simge" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Simge (isteğe bağlı)" @@ -5799,7 +5842,7 @@ msgstr "Varsayılan Değer" msgid "Default Parameter Value" msgstr "Varsayılan Parametre Değeri" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Parçalar" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "Parça, kendisinin revizyonu olamaz" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "Zaten bir revizyon olan bir parçanın revizyonu yapılamaz" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "Revizyon kodu belirtilmelidir" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "Revizyonlara yalnızca montaj parçaları için izin verilir" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "Bir şablon parçanın revizyonu yapılamaz" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "Üst parça aynı şablonu göstermelidir" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Bu seri numarasına sahip stok kalemi zaten var" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "Kopyası oluşturulan parça revizyonu zaten var." -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Bu Ad, IPN ve Revizyona sahip parça zaten var." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Parçalar yapısal parça kategorilerine atanamaz!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Parça adı" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Şablon Mu" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Bu parça bir şablon parçası mı?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Bu parça başka bir parçanın varyantı mı?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Şunun Varyantı" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Anahtar kelimeler" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Arama sonuçlarında görünürlüğü artırmak için parça anahtar kelimeleri" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Parça kategorisi" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "DPN" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Parça revizyon veya versiyon numarası" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Revizyon" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "Bu parça başka bir parçanın revizyonu mu?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Şunun Revizyonu" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Bu kalem normalde nerede depolanır?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Varsayılan Son Kullanma" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Bu parçanın stok kalemleri için son kullanma süresi (gün olarak)" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimum Stok" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "İzin verilen minimum stok düzeyi" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Bu parça için ölçü birimleri" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Bu parça diğer parçalardan üretilebilir mi?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Bu parça diğer parçaların üretiminde kullanılabilir mi?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Bu parçanın benzersiz kalemler için izleme özelliği var mı?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "Bu parçanın test sonuçları kaydedilebilir mi?" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Bu parça müşterilere satılabilir mi?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Bu parça aktif mi?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "Kilitli parçalar değiştirilemez" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "Bu, yazılım ürünü veya lisans gibi sanal bir parça mı?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "BOM Doğrulandı" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "Bu parçanın BOM'u geçerli mi?" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "BOM sağlama toplamı" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Saklanan BOM sağlama toplamı" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "BOM'u kontrol eden" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "BOM kontrol tarihi" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Oluşturan Kullanıcı" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Bu parçanın sorumlu sahibi" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Birden fazla sat" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Fiyat hesaplamalarını önbelleğe almak için kullanılan para birimi" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Minimum BOM Maliyeti" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Bileşenlerin minimum maliyeti" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Maksimum BOM Maliyeti" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Bileşenlerin maksimum maliyeti" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Minimum Satın Alma Maliyeti" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Minimum tarihsel satın alma maliyeti" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Maksimum Satın Alma Maliyeti" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Maksimum tarihsel satın alma maliyeti" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Minimum Dahili Fiyat" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Dahili fiyat kademelerine dayalı minimum maliyet" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Maksimum Dahili Fiyat" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Dahili fiyat kademelerine dayalı maksimum maliyet" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Minimum Tedarikçi Fiyatı" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Parça için minimum dış tedarikçi fiyatı" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Maksimum Tedarikçi Fiyatı" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Parça için maksimum dış tedarikçi fiyatı" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Minimum Varyant Maliyeti" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Varyant parçaların hesaplanan minimum maliyeti" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Maksimum Varyant Maliyeti" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Varyant parçaların hesaplanan maksimum maliyeti" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Minimum Maliyet" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Minimum maliyeti geçersiz kıl" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Maksimum Maliyet" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Maksimum maliyeti geçersiz kıl" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Hesaplanan genel minimum maliyet" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Hesaplanan genel maksimum maliyet" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Minimum Satış Fiyatı" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Fiyat kademelerine dayalı minimum satış fiyatı" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Maksimum Satış Fiyatı" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Fiyat kademelerine dayalı maksimum satış fiyatı" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Minimum Satış Maliyeti" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Minimum tarihsel satış fiyatı" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Maksimum Satış Maliyeti" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Maksimum tarihsel satış fiyatı" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Stok sayımı için parça" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Kalem Sayısı" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Sayım anındaki tekil stok kaydı sayısı" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Sayım anındaki toplam mevcut stok" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Tarih" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Stok sayımının yapıldığı tarih" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Minimum Stok Maliyeti" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Mevcut stokun tahmini minimum maliyeti" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Maksimum Stok Maliyeti" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Mevcut stokun tahmini maksimum maliyeti" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "Parça Satış Fiyat Kademesi" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "Parça Test Şablonu" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Geçersiz şablon adı - en az bir alfasayısal karakter içermelidir" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "Test şablonları sadece test edilebilir paçalar için oluşturulabilir" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "Aynı anahtara sahip test şablonu parça için zaten mevcut" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Test Adı" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Test için bir ad girin" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "Test Anahtarı" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "Test için basitleştirilmiş anahtar" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Test Açıklaması" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Bu test için açıklama girin" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "Bu test etkinleştirildi mi?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Gerekli" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Değer Gerektirir" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Bir test sonucu eklerken bu test bir değer gerektirir mi?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Ek Gerektirir" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Bir test sonucu eklerken bu test bir dosya eki gerektirir mi?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "Bu test için geçerli seçenekler (virgül ile ayrılmış)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM kalemi değiştirilemez - montaj kilitlidir" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM kalemi değiştirilemez - varyant montajı kilitlidir" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Üst parçayı seçin" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Alt parça" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "BOM'da kullanılacak parçayı seçin" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Bu BOM kalemi için BOM miktarı" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Bu BOM kalemi isteğe bağlıdır" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Bu BOM kalemi bir sarf malzemesidir (üretim emirlerinde izlenmez)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "Hazırlık Payı" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Bir üretimdeki hazırlık kayıplarını telafi etmek için gereken ek miktar" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "Fire" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Bir üretim için tahmini fire oranı, yüzde olarak ifade edilir (0-100)" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "Kat Yuvarlama" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Gerekli üretim miktarını bu değerin en yakın katına yuvarlayın" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "BOM kalemi referansı" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "BOM kalemi notları" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Sağlama Toplamı" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "BOM satırı sağlama toplamı" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Doğrulandı" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Bu BOM kalemi doğrulandı" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Devralınır" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Bu BOM kalemi, varyant parçaların BOM'larından devralınmıştır" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Varyant parçaların stok kalemleri bu BOM kalemi için kullanılabilir" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "İzlenebilir parçalar için miktar tamsayı olmalıdır" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Alt parça belirtilmelidir" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "BOM Kalemi Muadili" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "Muadil parça ile asıl parça aynı olamaz" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Üst BOM kalemi" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Muadil parça" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Parça 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Parça 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "İlgili Parçayı Seçin" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "Bu ilişki için not" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Bir parça ile kendisi arasında parça ilişkisi oluşturulamaz" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Kopyalanan ilişki zaten mevcut" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Üst Kategori" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Üst parça kategorisi" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Alt kategoriler" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Sonuçlar" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Bu şablon ile ilişkilendirilmiş sonuç sayısı" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Bu stok kaleminin alış para birimi" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Dosya bir görsel değil" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Orijinal Parça" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Kopyalanacak orijinal parçayı seçin" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Görseli Kopyala" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Orijinal parçadan görseli kopyala" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "BOM'u Kopyala" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Orijinal parçadan ürün ağacını kopyala" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Parametreleri Kopyala" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Orijinal parçadan parametreleri kopyala" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Notları Kopyala" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Orijinal parçadan notları kopyala" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Testleri Kopyala" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Orijinal parçadan test şablonlarını kopyala" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Başlangıç Stok Miktarı" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Bu parça için başlangıç stok miktarını belirtin. Miktar sıfır ise, stok eklenmez." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Başlangıç Stok Konumu" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Bu parça için başlangıç stok konumunu belirtin" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Tedarikçiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Üreticiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Üretici parça numarası" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Seçilen şirket geçerli bir tedarikçi değildir" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Seçilen şirket geçerli bir üretici değildir" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Bu MPN ile eşleşen üretici parçası zaten mevcut" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Bu SKU ile tedarikçi parçası zaten mevcut" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategori Adı" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Üretiliyor" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Bu parçanın şu anda üretimde olan miktarı" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Bu parçanın üretilmesi planlanan açık miktarı" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Stok Kalemleri" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "Revizyonlar" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Toplam Stok" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Tahsis Edilmemiş Stok" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Varyant Stoku" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Parçanın Kopyasını Oluştur" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Başlangıç verisini diğer parçadan kopyala" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Başlangıç Stoku" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Başlangıç stok miktarı ile parça oluştur" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Tedarikçi Bilgileri" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Bu parça için ilk tedarikçi bilgilerini ekleyin" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kategori Parametrelerini Kopyala" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Seçilen parça kategorisinden parametre şablonlarını kopyala" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Mevcut Görsel" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Mevcut parça görselinin dosya adı" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Görsel dosyası mevcut değil" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Tüm ürün ağacını doğrula" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Üretebilir Miktar" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Üretim Emirleri için Gerekli" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Üretim Emirlerine Tahsis Edildi" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Satış Siparişleri için Gerekli" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Satış Siparişlerine Tahsis Edildi" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" -msgstr "" +msgstr "Parça DPN" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" -msgstr "" +msgstr "Parça Açıklaması" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" -msgstr "" - -#: part/serializers.py:1298 -msgid "Select a category to include all parts within that category (and subcategories)" -msgstr "" - -#: part/serializers.py:1308 -msgid "Select a location to include all parts with stock in that location (including sub-locations)" -msgstr "" - -#: part/serializers.py:1315 -msgid "Generate Stocktake Entries" -msgstr "" +msgstr "Stok sayımı bilgisi oluşturmak üzere bir parça (ve varsa varyantlarını) seçin" #: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "Kategorideki (ve alt kategorilerdeki) tüm parçaları dahil etmek için bir kategori seçin" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "Konumda (ve alt konumlarda) stoğu bulunan tüm parçaları dahil etmek için bir konum seçin" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "Stok Sayımı Kayıtları Oluşturun" + +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" -msgstr "" +msgstr "Seçili parçalar için stok sayımı girdilerini kaydedin" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" -msgstr "" +msgstr "Rapor Oluştur" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" -msgstr "" +msgstr "Seçili parçalar için stok sayımı raporu oluşturun" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minimum Fiyat" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Minimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Minimum fiyat para birimi" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Maksimum Fiyat" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Maksimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Maksimum fiyat para birimi" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Güncelle" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Bu parçanın fiyatlandırmasını güncelle" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Sağlanan para birimlerinden {default_currency} para birimine dönüştürülemedi" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Minimum fiyat maksimum fiyattan yüksek olamaz" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Maksimum fiyat minimum fiyattan düşük olamaz" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "Miktar sıfır veya daha büyük olmalıdır" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Üst montajı seçin" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Bileşeni seçin" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "BOM'u kopyalanacak parçayı seçin" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Mevcut Verileri Temizle" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Kopyalamadan önce mevcut BOM kalemlerini temizle" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Devralınanı Dahil Et" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Şablon parçalardan devralınan BOM kalemlerini dahil et" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Geçersiz Satırları Atla" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Geçersiz satırları atlamak için bu seçeneği etkinleştir" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Muadil Parçaları Kopyala" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOM kalemlerinin kopyasını oluştururken muadil parçaları kopyala" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Düşük stok bildirimi" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "{part.name} için mevcut stok, yapılandırılan minimum seviyenin altına düştü" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Eskimiş stok bildirimi" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "Geçerlilik tarihi yaklaşan 1 adet stok kaleminiz var" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "Geçerlilik tarihleri yaklaşan {item_count} adet stok kaleminiz var" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Geçerlilik tarihi yok" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "{abs(days_diff)} Gün önce süresi doldu" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Süresi bugün doluyor" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} gün" @@ -7580,64 +7620,77 @@ msgstr "TME barkodları taraması için destek sağlar" msgid "The Supplier which acts as 'TME'" msgstr "'TME' rolünü üstlenen tedarikçi" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "Eklentileri yalnızca yetkili personel yönetebilir" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "Eklenti kurulumu devre dışı bırakıldı" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Eklenti kurulumu başarılı" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Eklenti {path} yoluna kuruldu" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "Eklenti kayıt defterinde bulunamadı" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "Eklenti paketlenmiş bir eklenti değildir" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "Eklenti paketi adı bulunamadı" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "Eklentileri yalnızca yetkili personel yönetebilir" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "Eklenti kaldırma devre dışı bırakıldı" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "Bu eklenti şu an aktif olduğundan kaldırılamaz" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "Eklenti zorunlu olduğu için kaldırılamaz" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "Eklenti örnek bir eklenti olduğu için kaldırılamaz" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "Eklenti yerleşik bir eklenti olduğu için kaldırılamaz" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "Eklenti kurulu değil" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "Eklenti kurulumu bulunamadı" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "Eklenti başarıyla kaldırıldı" @@ -7689,21 +7742,21 @@ msgstr "Paket Eklenti" msgid "Plugin" msgstr "Eklenti" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Yazar bulunamadı" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "'{p}' eklentisi, şu anki InvenTree sürümü {v} ile uyumlu değildir" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Eklenti en az {v} sürümünü gerektirir" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Eklenti en fazla {v} sürümünü gerektirir" @@ -7884,51 +7937,51 @@ msgstr "Kurulum onaylanmadı" msgid "Either packagename or URL must be provided" msgstr "Paket adı veya URL'den biri belirtilmelidir" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Tam yeniden yükleme" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "Eklenti kayıt defterini tamamen yeniden yükle" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Yeniden yüklemeye zorla" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Eklenti kayıt defterini, zaten yüklenmiş olsa bile yeniden yüklemeye zorla" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "Eklentileri topla" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "Eklentileri topla ve kayıt defterine ekle" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Eklentiyi Aktifleştir" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Bu eklentiyi aktifleştir" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "Zorunlu eklenti pasifleştirilemez" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "Yapılandırmayı sil" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "Eklenti yapılandırmasını veritabanından sil" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "Bu ayarların uygulanacağı kullanıcı" @@ -7962,11 +8015,11 @@ msgstr "A3" #: report/helpers.py:45 msgid "Legal" -msgstr "" +msgstr "Yasal" #: report/helpers.py:46 msgid "Letter" -msgstr "" +msgstr "Harf" #: report/models.py:128 msgid "Template file with this name already exists" @@ -8190,7 +8243,7 @@ msgstr "Toplam" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Seri Numara" @@ -8215,7 +8268,7 @@ msgstr "Stok Kalemi Test Raporu" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Takılı Kalemler" @@ -8248,200 +8301,212 @@ msgstr "Sonuç yok (gerekli)" msgid "No result" msgstr "Sonuç yok" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Kaynak dosyası mevcut değil" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Görsel dosyası bulunumadı" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "part_image etiketi bir parça örneği gerektirir" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "company_image etiketi bir şirket örneği gerektirir" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Konum derinliğine göre filtrele" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Üst seviye konumlara göre filtrele" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Filtrelenmiş sonuçlara alt konumları dahil et" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "Üst Konum" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Üst konuma göre filtrele" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Parça adı (büyük/küçük harf duyarlı değildir)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Parça adı şunu içerir (büyük/küçük harf duyarlı değildir)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Parça adı (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Parça IPN (büyük/küçük harf duyarlı değildir)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Parça IPN şunu içerir (büyük/küçük harf duyarlı değildir)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Parça IPN (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Minimum stok" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Maksimum stok" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Durum Kodu" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Harici Konum" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Üretim Emrine göre Tüketilenler" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" -msgstr "" +msgstr "Başka bir stok kalemine bağlı" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" -msgstr "" +msgstr "Parça Ağacı" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" -msgstr "" +msgstr "Daha önce güncellendi" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" -msgstr "" +msgstr "Güncellendi (den sonra)" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" -msgstr "" +msgstr "Stok Sayımı (-dan önce)" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" -msgstr "" +msgstr "Stok Sayımı (-dan sonra)" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" -msgstr "" +msgstr "Son kullanma tarihi öncesi" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" -msgstr "" +msgstr "Son kullanma tarihi sonrası" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" -msgstr "" +msgstr "Bozuk" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" -msgstr "" +msgstr "Bu stok kalemini ve bağlı tüm alt kalemleri hariç tutmak için bir PK girin" + +#: stock/api.py:980 +msgid "Cascade Locations" +msgstr "Konumları alt konumlara uygula" #: stock/api.py:981 -msgid "Cascade Locations" -msgstr "" - -#: stock/api.py:982 msgid "If true, include items in child locations of the given location" -msgstr "" +msgstr "Açıksa belirtilen konumun alt konumlarındaki öğeleri de dahil eder" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" -msgstr "" +msgstr "Sayısal konum ID'si veya \"null\" değeriyle filtreleyin" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" -msgstr "" +msgstr "Miktar gereklidir" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" -msgstr "" +msgstr "Geçerli bir parça girilmelidir" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" -msgstr "" +msgstr "Belirtilen tedarikçi parçası bulunamadı" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" -msgstr "" +msgstr "Tedarikçi parçası için paket boyutu tanımlanmış, ancak ‘use_pack_size’ seçeneği etkin değil" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" -msgstr "" +msgstr "Takibi olmayan bir parça için seri numarası verilemez" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" -msgstr "" +msgstr "Takılıyı Dahil Et" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" -msgstr "" +msgstr "Aktifse verilen stok kaleminin altına takılı öğelerin test sonuçları da dahil edilir" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" -msgstr "" +msgstr "Sayısal Stok Kalemi ID’sine göre Filtrele" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" -msgstr "" +msgstr "Belirtilen ID {id} ile bir stok kalemi bulunamadı" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" -msgstr "" +msgstr "Varyantları Dahil Et" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" -msgstr "" +msgstr "(-den sonra) sil" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" -msgstr "" +msgstr "Önce" #: stock/models.py:73 msgid "Stock Location type" -msgstr "" +msgstr "Stok Konumu Türü" #: stock/models.py:74 msgid "Stock Location types" -msgstr "" +msgstr "Stok Konum Türleri" #: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" -msgstr "" +msgstr "Simge atanmamış tüm konumlar için varsayılan simge (isteğe bağlı)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Stok Konumu" @@ -8449,21 +8514,21 @@ msgstr "Stok Konumu" msgid "Stock Locations" msgstr "Stok Konumları" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" -msgstr "" +msgstr "Sahip" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" -msgstr "" +msgstr "Sahibi Seçin" #: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" +msgstr "Stok kalemleri yapısal stok konumlarına doğrudan yerleştirilemez; ancak alt konumlara yerleştirilebilir." #: stock/models.py:213 users/models.py:497 msgid "External" -msgstr "" +msgstr "Harici" #: stock/models.py:214 msgid "This is an external stock location" @@ -8481,274 +8546,274 @@ msgstr "Bu konumun stok konumu türü" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Bazı stok kalemleri zaten bu stok konumunda bulunduğundan, bu stok konumunu yapısal hale getiremezsiniz!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field} mevcut değil" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Parça belirtilmelidir" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Stok kalemleri yapısal stok konumlarına yerleştirilemez!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Sanal parçalar için stok kalemi oluşturulamaz" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Parça türü ('{self.supplier_part.part}'), {self.part} olmalıdır" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Seri numarası olan ögenin miktarı bir olmalı" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Miktar birden büyük ise seri numarası ayarlanamaz" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Öge kendisine ait olamaz" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "is_building=True ise ögenin bir üretim referansı olmalıdır" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Üretim referansı aynı parça nesnesini göstermiyor" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Üst Stok Kalemi" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Temel parça" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Bu stok kalemiyle eşleşen bir tedarikçi parçası seçin" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Bu stok kalemi nerede bulunur?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Bu stok kaleminin ambalajı şu şekilde saklanmaktadır" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Şuna Takıldı" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Bu öge başka bir ögeye takılı mı?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" -msgstr "" +msgstr "Bu stok kalemine ait parti kodu" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" -msgstr "" +msgstr "Stok Miktarı" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" -msgstr "" +msgstr "Kaynak Üretim" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" -msgstr "" +msgstr "Bu stok kalemi için üretim kaydı" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" -msgstr "" +msgstr "Tüketen" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" -msgstr "" +msgstr "Bu stok kaleminin kullanıldığı üretim emri" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" -msgstr "" +msgstr "Kaynak Satın Alma Emri" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" -msgstr "" +msgstr "Bu stok kalemi için satın alma emri" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" -msgstr "" +msgstr "Hedef satış siparişi" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "" +msgstr "Stok kalemi için son kullanma tarihi. Bu tarihten sonra stok süresi dolmuş kabul edilir" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" -msgstr "" +msgstr "Tükendiğinde sil" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" -msgstr "" +msgstr "Stok tükendiğinde bu stok kalemini sil" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" -msgstr "" +msgstr "Satın alma anındaki birim alış fiyatı" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" -msgstr "" +msgstr "Parçaya dönüştürüldü" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" -msgstr "" +msgstr "Miktar, mevcut stoğu aşıyor" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" -msgstr "" +msgstr "Parça için izlenebilirlik etkin değil" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" -msgstr "" +msgstr "Miktar tam sayı olmalıdır" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" -msgstr "" +msgstr "Miktar, mevcut stok miktarını ({self.quantity}) aşmamalıdır" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" -msgstr "" +msgstr "Seri numaraları liste halinde girilmelidir" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Miktar seri numaları ile eşleşmiyor" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" -msgstr "" +msgstr "Stok, yapısal bir konuma atanamaz" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" -msgstr "" +msgstr "Test şablonu mevcut değil" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" -msgstr "" +msgstr "Stok kalemi bir satış siparişine atanmıştır" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" -msgstr "" +msgstr "Stok kalemi başka bir stok kalemine takılıdır" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" -msgstr "" +msgstr "Bu öge, başka ögeler de içeriyor" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stok kalemi stokta olmadığı için taşınamaz" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,248 +8857,248 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Tedarikçi Parça Numarası" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" -msgstr "" +msgstr "Bu parçaya seri numarası atanamaz" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Seri numaraları zaten mevcut" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" -msgstr "" +msgstr "Takılacak stok kalemini seçin" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" -msgstr "" +msgstr "Miktar" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" -msgstr "" +msgstr "Takılacak kalemlerin miktarını girin" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "İşlem notu ekle (isteğe bağlı)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" -msgstr "" - -#: stock/serializers.py:834 -msgid "Stock item is unavailable" -msgstr "" +msgstr "Miktar en az \"1\" olmalıdır" #: stock/serializers.py:845 +msgid "Stock item is unavailable" +msgstr "Stok kalemi mevcut değil" + +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" -msgstr "" +msgstr "Seçilen parça malzeme listesinde bulunamadı" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" -msgstr "" +msgstr "Takılacak miktar, mevcudu geçmemeli" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" -msgstr "" +msgstr "Sökülen ürün için hedef konum" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" -msgstr "" +msgstr "Stok kaleminin dönüştürüleceği parçayı seçin" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" -msgstr "" +msgstr "Seçilen parça dönüştürülmeye uygun değil" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" -msgstr "" +msgstr "Tedarikçi parçası atanmış stok kalemi dönüştürülemez" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" -msgstr "" +msgstr "Stok kalemi durum kodu" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" -msgstr "" +msgstr "Durumu değiştirilecek stok kalemlerini seçin" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" -msgstr "" +msgstr "Hiçbir stok kalemi seçilmedi" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Alt konumlar" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" -msgstr "" +msgstr "Üst stok konumu" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" -msgstr "" +msgstr "Parça satılabilir olmalıdır" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" -msgstr "" +msgstr "Ürün bir satış siparişine tahsis edilmiştir" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" -msgstr "" +msgstr "Ürün bir üretim emrine tahsis edilmiştir" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" -msgstr "" +msgstr "Stok kalemlerini atamak için müşteri" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" -msgstr "" +msgstr "Seçilen şirket bir müşteri değil" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" -msgstr "" +msgstr "Stok tahsis notları" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" -msgstr "" - -#: stock/serializers.py:1457 -msgid "Stock merging notes" -msgstr "" - -#: stock/serializers.py:1462 -msgid "Allow mismatched suppliers" -msgstr "" - -#: stock/serializers.py:1463 -msgid "Allow stock items with different supplier parts to be merged" -msgstr "" +msgstr "Bir stok kalemleri listesi girilmelidir" #: stock/serializers.py:1468 -msgid "Allow mismatched status" -msgstr "" +msgid "Stock merging notes" +msgstr "Stok birleştirme notları" -#: stock/serializers.py:1469 -msgid "Allow stock items with different status codes to be merged" -msgstr "" +#: stock/serializers.py:1473 +msgid "Allow mismatched suppliers" +msgstr "Farklı tedarikçilere izin ver" + +#: stock/serializers.py:1474 +msgid "Allow stock items with different supplier parts to be merged" +msgstr "Farklı tedarikçi parçalarına sahip stokları birleştirmeye izin ver" #: stock/serializers.py:1479 +msgid "Allow mismatched status" +msgstr "Farklı durumlara sahip kalemlere izin ver" + +#: stock/serializers.py:1480 +msgid "Allow stock items with different status codes to be merged" +msgstr "Farklı durum kodlarına sahip stokları birleştirmeye izin ver" + +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" -msgstr "" +msgstr "En az iki stok kalemi girilmelidir" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" -msgstr "" +msgstr "Değişiklik Yok" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" -msgstr "" +msgstr "Stok Kalemi birincil anahtar (PK) değeri" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" -msgstr "" +msgstr "Stok kalemi mevcut stokta yok" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" -msgstr "" +msgstr "Stok kalemi zaten stokta" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" -msgstr "" +msgstr "Miktar negatif olamaz" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" -msgstr "" +msgstr "Stok aktarım notları" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" -msgstr "" +msgstr "Mevcut stokla birleştir" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" -msgstr "" +msgstr "Mümkünse iade edilen ürünleri mevcut stoklarla birleştir" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" -msgstr "" +msgstr "Sıradaki Seri Numarası" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" -msgstr "" +msgstr "Önceki Seri Numarası" #: stock/status_codes.py:11 msgid "OK" @@ -9089,11 +9154,11 @@ msgstr "Stok manuel olarak çıkarıldı" #: stock/status_codes.py:56 msgid "Serialized stock items" -msgstr "" +msgstr "Seri numaralı stok kalemleri" #: stock/status_codes.py:58 msgid "Returned to stock" -msgstr "" +msgstr "Stoğa geri alındı" #: stock/status_codes.py:61 msgid "Location changed" @@ -9133,7 +9198,7 @@ msgstr "Birleştirilen stok kalemleri" #: stock/status_codes.py:79 msgid "Converted to variant" -msgstr "" +msgstr "Varyanta dönüştürüldü" #: stock/status_codes.py:82 msgid "Build order output created" @@ -9145,23 +9210,23 @@ msgstr "Üretim emri çıktısı tamamlandı" #: stock/status_codes.py:84 msgid "Build order output rejected" -msgstr "" +msgstr "Üretim emri çıktısı reddedildi" #: stock/status_codes.py:85 msgid "Consumed by build order" -msgstr "" +msgstr "Üretim emri tarafından tüketildi" #: stock/status_codes.py:88 msgid "Shipped against Sales Order" -msgstr "" +msgstr "Satış siparişi kapsamında sevk edildi" #: stock/status_codes.py:91 msgid "Received against Purchase Order" -msgstr "" +msgstr "Satın alma siparişi kapsamında teslim alındı" #: stock/status_codes.py:94 msgid "Returned against Return Order" -msgstr "" +msgstr "İade siparişine karşılık iade edildi" #: stock/status_codes.py:97 msgid "Sent to customer" @@ -9173,15 +9238,15 @@ msgstr "Müşteriden geri döndü" #: templates/403.html:6 templates/403.html:10 templates/403_csrf.html:7 msgid "Permission Denied" -msgstr "" +msgstr "İzin Reddedildi" #: templates/403.html:11 msgid "You do not have permission to view this page." -msgstr "" +msgstr "Bu sayfayı görüntülemek için izniniz yok." #: templates/403_csrf.html:11 msgid "Authentication Failure" -msgstr "" +msgstr "Kimlik Doğrulaması Başarısız" #: templates/403_csrf.html:12 msgid "You have been logged out from InvenTree." @@ -9447,59 +9512,59 @@ msgstr "" #: users/models.py:529 msgid "Chosen display name for the user" -msgstr "" +msgstr "Kullanıcının görünen adı" #: users/models.py:535 msgid "Position" -msgstr "" +msgstr "Konumu" #: users/models.py:536 msgid "Main job title or position" -msgstr "" +msgstr "Ana unvanı veya pozisyonu" #: users/models.py:543 msgid "User status message" -msgstr "" +msgstr "Kullanıcı durum mesajı" #: users/models.py:550 msgid "User location information" -msgstr "" +msgstr "Kullanıcı konum bilgisi" #: users/models.py:555 msgid "User is actively using the system" -msgstr "" +msgstr "Kullanıcı, sistemi aktif kullanıyor" #: users/models.py:562 msgid "Preferred contact information for the user" -msgstr "" +msgstr "Kullanıcının tercih edilen iletişim bilgileri" #: users/models.py:568 msgid "User Type" -msgstr "" +msgstr "Kullanıcı Türü" #: users/models.py:569 msgid "Which type of user is this?" -msgstr "" +msgstr "Bu, hangi tür kullanıcı?" #: users/models.py:575 msgid "Organisation" -msgstr "" +msgstr "Organizasyon" #: users/models.py:576 msgid "Users primary organisation/affiliation" -msgstr "" +msgstr "Kullanıcının ana organizasyonu/ilişkisi" #: users/models.py:584 msgid "Primary Group" -msgstr "" +msgstr "Birincil Grup" #: users/models.py:585 msgid "Primary group for the user" -msgstr "" +msgstr "Kullanıcının birincil grubu" #: users/ruleset.py:26 msgid "Admin" -msgstr "" +msgstr "Yönetici" #: users/ruleset.py:32 msgid "Purchase Orders" @@ -9511,7 +9576,7 @@ msgstr "Satış Siparişleri" #: users/ruleset.py:34 msgid "Return Orders" -msgstr "" +msgstr "İade Emirleri" #: users/serializers.py:190 msgid "Username" @@ -9537,59 +9602,75 @@ msgstr "Kullanıcının soyadı" msgid "Email address of the user" msgstr "Kullanıcının e-posta adresi" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Personel" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Bu kullanıcının personel izinleri var mı" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Süper Kullanıcı" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Bu kullanıcı bir süper kullanıcı mı" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Bu kullanıcı hesabı aktif mi" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" -msgstr "" +msgstr "Bu alanı sadece bir yönetici değiştirebilir" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" -msgstr "" +msgstr "Parola" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" -msgstr "" +msgstr "Kullanıcının parolası" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" -msgstr "" +msgstr "Uyarıları yok say" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" +msgstr "Şifre kuralları uyarılarını yok say" + +#: users/serializers.py:410 +msgid "Staff" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" -msgstr "" +msgstr "Kullanıcı yaratmak için yetkiniz yok" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Kullanıcı hesabınız oluşturulmuştur." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Giriş yapmak için lütfen şifre sıfırlama fonksiyonunu kullanınız" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "InvenTree'ye Hoşgeldiniz" diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po index 8a0e572d71..8f90071d31 100644 --- a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "Кінцева точка API не знайдена" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Для масових операцій необхідно надати перелік сутностей або фільтрів" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Сутності необхідно надати списком" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Надано неправильний список сутностей" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "Фільтри необхідно надавати у вигляді словника" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "Надано неправильні фільтри" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Немає сутностей що відповідають наданим критеріям" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "У користувача немає дозволу на перегляд цієї моделі" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Не вдалося перетворити {original} на {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Невірна кількість" @@ -112,13 +104,13 @@ msgstr "Введіть дату" msgid "Invalid decimal value" msgstr "Неправильне десяткове значення" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Нотатки" @@ -131,75 +123,91 @@ msgstr "Значення '{name}' не відповідає шаблону фо msgid "Provided value does not match required pattern: " msgstr "Надане значення не відповідає обов'язковому шаблону: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "Неможливо серіалізувати більше ніж 1000 сутностей за раз" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Пустий серійний номер" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Видаліть HTML тег з цього значення" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "Дані містять заборонений вміст у форматі Markdown" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Помилка підключення" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Сервер відправив некоректний код статусу" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Відбулося виключення" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Сервер повернув невірне значення Content-Length" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Розмір зображення занадто великий" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Розмір зображення перевищує максимально дозволений розмір" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Віддалений сервер повернув пусту відповідь" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +215,11 @@ msgstr "" msgid "Log in to the app" msgstr "Авторизуватися в додатку" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Електронна пошта" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "Необхідно увімкнути двофакторну автентифікацію, перед тим як робити будь-що інше." @@ -259,18 +267,18 @@ msgstr "" msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Назва" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Опис" msgid "Description (optional)" msgstr "Опис (опціонально)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Шлях" @@ -313,75 +321,66 @@ msgstr "" msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Помилка сервера" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Зображення" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Китайська (спрощена)" msgid "Chinese (Traditional)" msgstr "Китайська (Традиційна)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "Деталь" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Розхідний матеріал" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Збірка" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Тестуємо" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Доступно" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Місце" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Обрати деталь для створення" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Кількість" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Дозволити варіанти" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "У виробництві" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,794 +1554,794 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Користувач" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Ціна" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Назва" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Посилання" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Коментар" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "Дата завантаження" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "Дата завантаження файлу" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "Розмір файлу" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "Розмір файлу в байтах" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "Етикетка" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "Колір" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "Модель" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "Список вибору" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "Заблоковано" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Прапорець" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Шаблон" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Дані" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Примітка" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Компонент" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Доступний для продажу" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Віртуальний" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Показати пов'язані деталі" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Чи призначені групи користувачеві повинні бути видалені, якщо вони не є резервним сервером IdP. Відключення цього налаштування може спричинити проблеми безпеки" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "Позиція активна" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "Позиція постачальника активна" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "Внутрішня позиція активна" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Виробник" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Позиція виробника" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Базова позиція" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Обрати позицію" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "Базова вартість" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Мінімальний платіж (напр. комісія за збереження)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "В наявності" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Дійсно" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Внутрішній компонент" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4851,718 +4870,742 @@ msgstr "" msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "" -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "" @@ -5598,146 +5641,146 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Глибина" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Батьківський елемент" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Фільтр за батьківською категорією" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "" @@ -5778,7 +5821,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5799,7 +5842,7 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Позиції" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Назва позиції" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Це шаблон" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Ця позиція є шаблоном?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Опис позиції (опціонально)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Ревізія" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "Ревізія" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Мінімальний запас" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Мінімально дозволений рівень запасів" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Одиниці виміру для цієї позиції" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Чи можна побудувати цю позицію з інших компонентів?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Дата" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Тестова назва" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Позиція 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Позиція 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "Результати" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Виробничий номер позиції" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Початковий запас" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Наявне зображення" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Мінімальна ціна" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Максимальна ціна" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "" msgid "The Supplier which acts as 'TME'" msgstr "" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7884,51 +7937,51 @@ msgstr "" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8215,7 +8268,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "" @@ -8248,184 +8301,196 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" @@ -8449,11 +8514,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" @@ -8481,274 +8546,274 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "" msgid "Email address of the user" msgstr "Адреса електронної пошти користувача" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Персонал" - -#: users/serializers.py:310 -msgid "Does this user have staff permissions" +#: users/serializers.py:244 +msgid "User must be authenticated" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" + +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po index 4ea506a2db..ea817c061a 100644 --- a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po +++ b/src/backend/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: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "API endpoint không tồn tại" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Không có dữ liệu được cung cấp" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Người dùng không được phân quyền xem mẫu này" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Không thể chuyển đổi {original} sang {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Số lượng cung cấp không hợp lệ" @@ -112,13 +104,13 @@ msgstr "Nhập ngày" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "Ghi chú" @@ -131,75 +123,91 @@ msgstr "Giá trị '{name}' không xuất hiện ở định dạng mẫu" msgid "Provided value does not match required pattern: " msgstr "Giá trị được cung cấp không khớp với mẫu bắt buộc: " -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "Chuỗi số sê-ri trống" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "Trùng lặp sê-ri" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Khoảng nhóm {group} vượt cho phép số lượng ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "Không tìm thấy số sê-ri" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "Xóa thẻ HTML từ giá trị này" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "Lỗi kết nối" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "Máy chủ phản hồi với mã trạng thái không hợp lệ" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "Xảy ra Exception" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "Máy chủ đã phản hồi với giá trị Content-Length không hợp lệ" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "Hình ảnh quá lớn" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "Tải xuống hình ảnh vượt quá kích thước tối đa" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "Máy chủ trả về phản hồi trống" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "URL được cung cấp không phải là tệp hình ảnh hợp lệ" @@ -207,11 +215,11 @@ msgstr "URL được cung cấp không phải là tệp hình ảnh hợp lệ" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -259,18 +267,18 @@ msgstr "Số tham chiếu quá lớn" msgid "Invalid choice" msgstr "Lựa chọn sai" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Tên" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "Mô tả" msgid "Description (optional)" msgstr "Mô tả (tùy chọn)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "Đường dẫn" @@ -313,75 +321,66 @@ msgstr "Chuỗi băm duy nhất của dữ liệu mã vạch" msgid "Existing barcode found" msgstr "Mã vạch đã tồn tại" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Lỗi máy chủ" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Lỗi đã được ghi lại bởi máy chủ." -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Hình ảnh" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "Phải là một số hợp lệ" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "Tiền tệ" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Chọn tiền tệ trong các tùy chọn đang có" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "Giá trị không hợp lệ" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "Hình ảnh từ xa" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "URL của tệp hình ảnh bên ngoài" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "Chức năng tải hình ảnh từ URL bên ngoài không được bật" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +536,11 @@ msgstr "Tiếng Trung (Giản thể)" msgid "Chinese (Traditional)" msgstr "Tiếng Trung (Phồn thể)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +552,30 @@ msgstr "Đơn vị vật lý không hợp lệ" msgid "Not a valid currency code" msgstr "Mã tiền tệ không hợp lệ" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "Trạng thái đặt hàng" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Phiên bản cha" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "" msgid "Part" msgstr "Nguyên liệu" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Danh mục" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Xây dựng nguồn gốc" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "Đã gán cho tôi" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Đã gán cho" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Bạn dựng phải được hủy bỏ trước khi có thể xóa được" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "Vật tư tiêu hao" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "Tuỳ chọn" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Lắp ráp" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "Đã theo dõi" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "Có thể kiểm tra" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "Đã cấp phát" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Đã dùng" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Có sẵn" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Bật đơn hàng" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Tạo đơn hàng" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "Địa điểm" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "Tạo đơn hàng" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Dây chuyền BOM chưa được xác thực" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Không thể tạo đơn hàng cho hàng hoá đang không hoạt động" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Không thể tạo đơn hàng cho hàng hoá đang mở khoá" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Phải chọn người dùng hoặc nhóm" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Sản phẩm đơn đặt bản dựng không thể thay đổi được" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "Tham chiếu đơn đặt bản dựng" msgid "Reference" msgstr "Tham chiếu" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Mô tả ngắn về phiên bạn (Tùy chọn)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "Chọn sản phẩm để xây dựng" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Địa điểm nguồn" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Chọn địa điểm để lấy trong kho cho bản dựng này (để trống để lấy từ bất kỳ vị trí kho nào)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "Địa điểm đích" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Chọn địa điểm nơi hàng hóa hoàn thiện sẽ được lưu kho" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "Xây dựng số lượng" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Số kho hàng để dựng" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "Những mục hoàn thành" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Số sản phẩm trong kho đã được hoàn thiện" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "Trnạg thái bản dựng" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "Mã trạng thái bản dựng" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "Mã lô hàng" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Mã lô cho đầu ra bản dựng này" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "Ngày tạo" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "Ngày hoàn thành mục tiêu" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ngày mục tiêu để hoàn thành bản dựng. Bản dựng sẽ bị quá hạn sau ngày này." -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "Ngày hoàn thành" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "hoàn thành bởi" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "Cấp bởi" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Người dùng người đã được phân công cho đơn đặt bản dựng này" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Chịu trách nhiệm" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Người dùng hoặc nhóm có trách nhiệm với đơn đặt bản dựng này" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Liên kết bên ngoài" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Liên kết đến URL bên ngoài" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "Độ ưu tiên" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Độ quan trọng của đơn đặt bản dựng" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "Mã dự án" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Mã dự án cho đơn đặt bản dựng này" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Không thể dỡ bỏ tác vụ để hoàn tất phân bổ" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Đơn đặt bản dựng {build} đã được hoàn thành" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Một đơn đặt bản dựng đã được hoàn thành" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Số sê-ri phải được cung cấp cho hàng hoá có thể theo dõi" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Không có đầu ra bản dựng đã được chỉ ra" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Đầu ra bản dựng đã được hoàn thiện" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Đầu ra bản dựng không phù hợp với đơn đặt bản dựng" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "Số lượng phải lớn hơn 0" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Số lượng không thể lớn hơn số lượng đầu ra" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Tạo đầu ra {serial} chưa vượt qua tất cả các bài kiểm tra" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Tạo mục đơn hàng" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "Dựng đối tượng" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "Dựng đối tượng" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Số lượng" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Yêu cầu số lượng để dựng đơn đặt" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Xây dựng mục phải xác định đầu ra, bởi vì sản phẩm chủ được đánh dấu là có thể theo dõi" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "Hàng trong kho đã chọn không phù hợp với đường BOM" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Số lượng phải là 1 cho kho sê ri" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Số lượng được phân bổ ({q}) không thể vượt quá số lượng có trong kho ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "Kho hàng đã bị phân bổ quá đà" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "Kho hàng" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "Kho hàng gốc" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Số lượng kho hàng cần chỉ định để xây dựng" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "Cài đặt vào" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Kho hàng đích" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "Tạo cấp" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Tên sản phẩm" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Đầu ra xây dựng không hợp với bản dựng cha" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Đầu ra sản phẩm không phù hợp với bản dựng đơn đặt hàng" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Đầu ra bản dựng này đã được hoàn thành" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Đầu ra bản dựng này chưa được phân bổ đầy đủ" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Điền số lượng cho đầu ra bản dựng" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Số lượng nguyên dương cần phải điền cho sản phẩm có thể theo dõi" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Cần nhập số lượng nguyên dương, bởi vì hóa đơn vật liệu chứa sản phẩm có thể theo dõi" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "Số sê-ri" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Nhập vào số sêri cho đầu ra bản dựng" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Vị trí tồn kho cho sản phẩm" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Số sêri tự cấp" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Tự động cấp số seri phù hợp cho hàng hóa được yêu cầu" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Số sêri sau đây đã tồn tại hoặc không hợp lệ" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Danh sách đầu ra bản dựng phải được cung cấp" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Vị trí kho cho đầu ra phế phẩm" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Hủy phân bổ" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Hủy bất kỳ phân kho nào cho đầu ra phế phẩm" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Lý do loại bỏ đầu ra bản dựng" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Vị trí cho đầu ra bản dựng hoàn thiện" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Chấp nhận phân kho dang dở" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Hoàn hiện đầu ra nếu kho chưa được phân bổ hết chỗ trống" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Xử lý phân bổ kho hàng" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Tiêu thụ bất kỳ hàng tồn kho nào đã được phân bổ cho dự án này." -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Xóa toàn bộ đầu ra chưa hoàn thành" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Xóa bất kỳ đầu ra bản dựng nào chưa được hoàn thành" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Chưa được cấp phép" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Chấp nhận trạng thái tiêu hao bởi đơn đặt bản dựng này" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Phân bổ trước khi hoàn thiện đơn đặt bản dựng này" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Kho quá tải" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Bạn muốn thế nào để xử lý hàng trong kho được gán thừa cho đơn đặt bản dựng" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Một vài hàng hóa đã được phân bổ quá thừa" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Chấp nhận chưa phân bổ được" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Chấp nhận hàng hóa không được phân bổ đầy đủ vào đơn đặt bản dựng này" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Kho được yêu cầu chưa được phân bổ hết không gian" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "Chấp nhận không hoàn thành" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Chấp nhận số yêu cầu của đầu ra bản dựng chưa được hoàn thành" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Số lượng bản dựng được yêu cầu chưa được hoàn thành" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Tạo đơn hàng có các đơn hàng đang mở" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Tạo đơn hàng phải ở trạng thái sản xuất." -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Đơn đặt bản dựng có đầu ra chưa hoàn thiện" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "Lộ giới" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Đầu ra bản dựng phải chỉ đến bản dựng tương ứng" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Mục chi tiết bản dựng" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part phải trỏ đến phần tương tự của đơn đặt bản dựng" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "Hàng hóa phải trong kho" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Số lượng có sẵn ({q}) đã bị vượt quá" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Đầu ra bản dựng phải được xác định cho việc phân sản phẩm được theo dõi" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Đầu ra bản dựng không thể chỉ định cho việc phân sản phẩm chưa được theo dõi" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "Hàng hóa phân bổ phải được cung cấp" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Vị trí kho nơi sản phẩm được lấy ra (để trống để lấy từ bất kỳ vị trí nào)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Ngoại trừ vị trí" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Không bao gồm hàng trong kho từ vị trí đã chọn này" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Kho trao đổi" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Hàng trong kho thuộc nhiều vị trí có thể dùng thay thế được cho nhau" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Kho thay thế" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Cho phép phân kho sản phẩm thay thế" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Mục tùy chọn" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Phân bổ các mục hóa đơn vật liệu tùy chọn đến đơn đặt bản dựng" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" msgstr "" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "Không thể khởi động tác vụ phân bổ tự động." - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "BOM liên quan" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID hàng hoá BOM" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Tên hàng hoá BOM" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" msgstr "" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "Sản phẩm nhà cung cấp" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "Số lượng đã phân bổ" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Tạo liên quan" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Tên danh mục hàng hoá" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "Có thể theo dõi" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Được kế thừa" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "Cho phép biến thể" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "Mục BOM" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Đang sản xuất" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Kho ngoài" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Số hàng tồn" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Kho hàng thay thế" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Hàng tồn kho có sẵn" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1495,43 +1494,43 @@ msgstr "Chờ" msgid "Cancelled" msgstr "Đã hủy" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Hoàn thành" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Kho được yêu cầu cho đặt hàng bản dựng" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Đơn đặt bản dựng quá hạn" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Đặt hàng bản dựng {bo} đang quá hạn" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "Đường dẫn" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "File" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Không có quyền xoá file đính kèm" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Không có quyền xoá file đính kèm" @@ -1555,794 +1554,794 @@ msgstr "Không phần mở rộng" msgid "Project Code Label" msgstr "Nhãn mã dự án" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "Đã cập nhật" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "Nhãn thời gian của lần cập cuối cùng" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "Mã dự án duy nhất" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "Mô tả dự án" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "Người dùng hoặc nhóm có trách nhiệm với dự án này" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "Giá trị cài đặt" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "Giá trị đã chọn không hợp lệ" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "Giá trị phải là kiểu boolean" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "Giá trị phải là một số nguyên dương" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "Chuỗi khóa phải duy nhất" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Người dùng" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "Số lượng giá phá vỡ" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "Giá" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "Đơn vị giá theo số lượng cụ thể" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "Đầu mối" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "Đầu mối tại điểm webhook được nhận" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "Tên của webhook này" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "Hoạt động" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "Webhook có hoạt động không" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "Chữ ký số" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "Chữ ký số để truy cập" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "Bí mật" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "Mã bí mật dùng chung cho HMAC" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "Mã Tin nhắn" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "Định danh duy nhất cho tin nhắn này" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "Máy chủ" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "Mãy chủ từ tin nhắn này đã được nhận" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "Đầu mục" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "Đầu mục tin nhắn" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "Thân" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "Thân tin nhắn này" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "Đầu mối của tin nhắn này đã nhận được" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "Làm việc vào" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "Công việc trong tin nhắn này đã kết thúc?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "Mã" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "Tiêu đề" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Liên kết" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "Đã công bố" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "Tác giả" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "Tóm tắt" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "Đọc" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "Tin này đã được đọc?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "Tệp ảnh" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "Tên đơn vị phải là một định danh hợp lệ" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "Tên đơn vị" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "Biểu tượng" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "Biểu tượng đơn vị tùy chọn" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "Định nghĩa" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "Định nghĩa đơn vị" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "Đính kèm" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "Tập tin bị thiếu" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "Thiếu liên kết bên ngoài" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "Chọn file đính kèm" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "Bình luận" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Giá trị" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "Đã tạo" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "Cập nhật lần cuối" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "Mẫu tham số" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "Tham số hộp kiểm tra không thể có đơn vị" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "Tham số hộp kiểm tra không thể có lựa chọn" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "Lựa chọn phải duy nhất" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "Tên tham số mẫu phải là duy nhất" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "Tên tham số" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "Đơn vị" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "Đơn vị vật lý cho tham số này" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "Mô tả tham số" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "Ô lựa chọn" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "Tham số này có phải là hộp kiểm tra?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "Lựa chọn" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "Lựa chọn hợp lệ từ tham số này (ngăn cách bằng dấu phẩy)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "Đã bật" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "Lựa chọn sai cho giá trị tham số" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "Mẫu" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "Dữ liệu" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "Giá trị tham số" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "Ghi chú" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "Trường ghi chú tùy chọn" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "Ngữ cảnh" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Kết quả" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Khóa" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} đã bị hủy" msgid "A order that is assigned to you was canceled" msgstr "Một đơn đặt từng được phân công cho bạn đã bị hủy bỏ" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "Mục đã nhận" @@ -2392,1235 +2391,1243 @@ msgstr "" msgid "Override" msgstr "" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "Đang chạy" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Công việc chờ xử lý" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tác vụ theo lịch" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tác vụ thất bại" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID tác vụ" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ID tác vụ duy nhất" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "Khoá" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "Thời gian khóa" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "Tên công việc" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "Chức năng" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "Tên chức năng" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "Đối số" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Đối số công việc" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Đối số từ khóa" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Đối số từ khóa công việc" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "Tên tập tin" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "Không có nhóm" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "URL trang web đã bị khóa bởi cấu hình" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "Cần khởi động lại" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "Một thiết lập đã bị thay đổi yêu cầu khởi động lại máy chủ" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "Chuyển dữ liệu chờ xử lý" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "Số đợt nâng cấp cơ sở dữ liệu chờ xử lý" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "Tên thực thể máy chủ" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "Mô tả chuỗi cho thực thể máy chủ" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "Sử dụng tên thực thể" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "Sử dụng tên thực thể trên thanh tiêu đề" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "Cấm hiển thị `giới thiệu`" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "Chỉ hiển thị cửa sổ `giới thiệu` với siêu người dùng" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Tên công ty" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "Tên công ty nội bộ" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "URL cơ sở" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "URL cơ sở cho thực thể máy chủ" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "Tiền tệ mặc định" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "Chọn tiền tệ chính khi tính giá" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "Tần suất cập nhật tiền tệ" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Mức độ thường xuyên để cập nhật tỉ giá hối đoái (điền 0 để tắt)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "ngày" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "Phần mở rộng cập nhật tiền tệ" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "Phần mở rộng cập nhật tiền tệ được sử dụng" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "Tải về từ URL" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "Cho phép tải ảnh và tệp tin từ xa theo URL bên ngoài" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "Giới hạn kích thước tải xuống" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "Kích thước tải xuống tối đa với hình ảnh từ xa" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "User-agent được dùng để tải xuống theo URL" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Cho phép ghi đè user-agent được dùng để tải về hình ảnh và tệp tin từ xa theo URL bên ngoài (để trống nghĩa là dùng mặc định)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "Thời gian kiểm tra bản cập nhật" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "Mức độ thường xuyên để kiểm tra bản cập nhật (điền 0 để tắt)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "Sao lưu tự động" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "Bật tính năng sao lưu tự động cơ sở dữ liệu và tệp tin đa phương tiện" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "Khoảng thời gian sao lưu tự động" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "Xác định số ngày giữa các kỳ sao lưu tự động" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "Khoảng thời gian xóa tác vụ" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "Kết quả tác vụ chạy ngầm sẽ bị xóa sau số ngày được chỉ định" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "Khoảng thời gian xóa nhật ký lỗi" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "Nhật ký lỗi sẽ bị xóa sau số ngày được chỉ định" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "Khoảng thời gian xóa thông báo" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "Thông báo sẽ bị xóa sau số ngày được chỉ định" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "Hỗ trợ mã vạch" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "Bật hỗ trợ máy quét mã vạch trong giao diện web" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "Độ trễ quét mã vạch" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "Thời gian trễ xử lý đầu đọc mã vạch" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "Hỗ trợ mã vạch qua webcam" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "Cho phép quét mã vạch qua webcam bên trong trình duyệt" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "Phiên bản Sản phẩm" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "Bật trường phiên bản cho sản phẩm" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "Mẫu IPN" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "Mẫu dùng nhanh phổ biến dành cho tìm IPN sản phẩm" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "Cho phép trùng IPN" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "Cho phép nhiều sản phẩm dùng IPN giống nhau" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "Cho phép sửa IPN" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "Cho phép đổi giá trị IPN khi sửa một sản phẩm" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "Sao chép dữ liệu BOM của sản phẩm" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "Sao chép dữ liệu BOM mặc định khi nhân bản 1 sản phẩm" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "Sao chép dữ liệu tham số sản phẩm" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "Sao chép dữ liệu tham số mặc định khi nhân bản 1 sản phẩm" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "Chép thông tin kiểm thử sản phẩm" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "Sao chép dữ liệu kiểm thử mặc định khi nhân bản 1 sản phẩm" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "Sao chéo mẫu tham số danh mục" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "Sao chéo mẫu tham số danh mục khi tạo 1 sản phẩm" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "Sản phẩm là mẫu bởi mặc định" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "Sản phẩm có thể lắp giáp từ thành phần khác theo mặc định" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Thành phần" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "Sản phẩm có thể được sử dụng mặc định như thành phần phụ" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "Có thể mua" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "Sản phẩm mặc định có thể mua được" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "Có thể bán" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "Sản phẩm mặc định có thể bán được" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "Sản phẩm mặc định có thể theo dõi được" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "Ảo" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "Sản phẩm mặc định là số hóa" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "Hiển thị sản phẩm liên quan" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "Hiện sản phẩm liên quan cho 1 sản phẩm" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "Số liệu tồn kho ban đầu" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "Cho phép tạo tồn kho ban đầu khi thêm 1 sản phẩm mới" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "Dữ liệu nhà cung cấp ban đầu" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Cho phép tạo dữ liệu nhà cung cấp ban đầu khi thêm 1 sản phẩm mới" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "Định dạng tên sản phẩm hiển thị" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "Định dạng để hiển thị tên sản phẩm" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "Biểu tượng mặc định của danh mục sản phẩm" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "Biểu tượng mặc định của danh mục sản phẩm (để trống nghĩa là không có biểu tượng)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối thiểu" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Số vị trí thập phân tối thiểu cần hiển thị khi tạo dữ liệu giá" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối đa" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Số vị trí thập phân tối đa cần hiển thị khi tạo dữ liệu giá" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "Sử dụng giá bán nhà cung cấp" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Bao gồm giá phá vỡ cả nhà cung cấp trong tính toán giá tổng thể" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "Ghi đè lịch sử mua hàng" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Giá đơn hàng đặt mua trước đó ghi đè giá phá vỡ của nhà cung cấp" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "Sử dụng giá hàng hóa trong kho" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Dùng giá bán từ dữ liệu kho nhập vào thủ công đối với bộ tính toán giá bán" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "Tuổi giá kho hàng" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Loại trừ hàng hóa trong kho cũ hơn số ngày ngày từ bảng tính giá bán" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "Sử dụng giá biến thể" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "Bao gồm giá biến thể trong bộ tính toán giá tổng thể" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "Chỉ các biến thể hoạt động" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "Chỉ sử dụng sản phẩm biến thể hoạt động để tính toán giá bán biến thể" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "Tần suất tạo lại giá" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "Số ngày trước khi giá sản phẩm được tự động cập nhật" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "Giá nội bộ" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "Bật giá nội bộ cho sản phẩm" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "Ghi đè giá nội bộ" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "Nếu khả dụng, giá nội bộ ghi đè tính toán khoảng giá" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "Bật in tem nhãn" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "Bật chức năng in tem nhãn từ giao diện web" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "DPI hỉnh ảnh tem nhãn" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Độ phân giải DPI khi tạo tệp hình ảnh để cung cấp cho plugin in ấn tem nhãn" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "Bật báo cáo" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "Cho phép tạo báo cáo" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "Chế độ gỡ lỗi" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "Tạo báo cáo trong chế độ gỡ lỗi (đầu ra HTML)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Khổ giấy" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "Kích thước trang mặc định cho báo cáo PDF" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "Bắt buộc đơn vị tham số" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "Nếu đơn vị được cung cấp, giá trị tham số phải phù hợp với các đơn vị xác định" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "Sê ri toàn cục duy nhất" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "Số sê ri cho hàng trong kho phải là duy nhất trong toàn hệ thống" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "Xóa kho đã hết hàng" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "Mẫu sinh mã theo lô" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "Mẫu tạo mã theo lô mặc định cho hàng trong kho" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "Quá hạn trong kho" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "Bật chức năng quá hạn tồn kho" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "Bán kho quá hạn" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "Cho phép bán hàng kho quá hạn" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "Thời gian hàng cũ trong kho" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "Số ngày hàng trong kho được xác định là cũ trước khi quá hạn" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "Dựng kho quá hạn" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "Cho phép xây dựng với kho hàng quá hạn" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "Kiểm soát sở hữu kho" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "Bật chức năng kiểm soát sở hữu kho với địa điểm và hàng trong kho" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "Biểu tượng địa điểm kho mặc định" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "Biểu tượng địa điểm kho hàng mặc định (trống nghĩa là không có biểu tượng)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "Hiển thị hàng hóa đã lắp đặt" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "Hiển thị hàng trong kho đã được lắp đặt trên bảng kho" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "Mã tham chiếu đơn đặt bản dựng" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "Mẫu bắt buộc cho để trường tham chiếu đơn đặt bản dựng" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "Bật đơn hàng trả lại" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "Bật chức năng đơn hàng trả lại trong giao diện người dùng" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "Mẫu tham chiếu đơn hàng trả lại" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "Sửa đơn hàng trả lại đã hoàn thành" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "Cho phép sửa đơn hàng trả lại sau khi đã hoàn thành rồi" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt hàng" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "Mẫu bắt buộc để tạo trường tham chiếu đơn đặt hàng" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "Vận chuyển mặc định đơn đặt hàng" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "Cho phép tạo vận chuyển mặc định với đơn đặt hàng" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "Sửa đơn đặt hàng đã hoàn thành" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Cho phép sửa đơn đặt hàng sau khi đã vận chuyển hoặc hoàn thành" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt mua" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "Mẫu bắt buộc cho để trường tham chiếu đơn đặt mua" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "Sửa đơn đặt mua đã hoàn thành" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Cho phép sửa đơn đặt mua sau khi đã vận chuyển hoặc hoàn thành" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "Tự động hoàn thành đơn đặt mua" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "Bật quên mật khẩu" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "Bật chức năng quên mật khẩu trong trang đăng nhập" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "Bật đăng ký" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "Cho phép người dùng tự đăng ký tại trang đăng nhập" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "Bật SSO" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "Cho phép SSO tại trang đăng nhập" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "Bật đăng ký SSO" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Cho phép người dùng tự đăng ký SSO tại trang đăng nhập" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "Yêu cầu email" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "Yêu cầu người dùng cung cấp email để đăng ký" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "Người dùng tự động điền SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "Tự động điền thông tin chi tiết từ dữ liệu tài khoản SSO" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "Thư 2 lần" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "Khi đăng ký sẽ hỏi người dùng hai lần thư điện tử của họ" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "Mật khẩu 2 lần" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "Khi đăng ký sẽ hỏi người dùng hai lần mật khẩu của họ" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "Các tên miền được phép" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Cấm đăng ký với 1 số tên miền cụ thể (dấu phẩy ngăn cách, bắt đầu với dấu @)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "Nhóm khi đăng ký" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "Bắt buộc MFA" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "Người dùng phải sử dụng bảo mật đa nhân tố." -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "Kiểm tra phần mở rộng khi khởi động" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Kiểm tra toàn bộ phần mở rộng đã được cài đặt khi khởi dộng - bật trong môi trường ảo hóa" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "Kiểm tra cập nhật plugin" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "Bật tích hợp URL" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "Bật phần mở rộng để thêm định tuyến URL" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "Bật tích hợp điều hướng" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "Bật phần mở rộng để tích hợp thanh định hướng" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "Bật tích hợp ứng dụng" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "Bật phần mở rộng để thêm ứng dụng" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "Cho phép tích hợp lập lịch" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "Bật phẩn mở rộng để chạy các tác vụ theo lịch" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "Bật tích hợp nguồn cấp sự kiện" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "Bật phần mở rộng để trả lời sự kiện bên trong" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "Ngoại trừ vị trí bên ngoài" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "Giai đoạn kiểm kê tự động" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "Hiển thị tên đầy đủ của người dùng" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "Hiển thị tên đầy đủ thay vì tên đăng nhập" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Nhà sản xuất" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Doanh nghiêp" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "Doanh nghiệp" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "Mô tả công ty" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "Mô tả của công ty" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "Trang web" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "URL trang web của công ty" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "Số điện thoại" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "Số điện thoại liên hệ" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "Địa chỉ email liên hệ" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Liên hệ" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "Đầu mối liên hệ" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "Liên kết đến thông tin công ty ngoài" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Bạn có bán hàng cho công ty này?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Bạn có mua hàng từ công ty này?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Công ty này có sản xuất sản phẩm?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Tiền tệ mặc định dùng cho công ty này" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "Địa chỉ" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "Địa chỉ" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "Chọn doanh nghiệp" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "Tiêu đề địa chỉ" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Tiêu đề mô tả mục địa chỉ" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "Địa chỉ chính" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "Đặt làm địa chỉ chính" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "Dòng 1" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "Địa chỉ dòng 1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "Dòng 2" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "Địa chỉ dòng 2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Mã bưu chính" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "Thành phố/Vùng" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Mã bưu chính thành phố/vùng" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "Bang/Tỉnh" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "Bang hay tỉnh" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "Quốc gia" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "Địa chỉ quốc gia" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Ghi chú vận chuyển" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Ghi chú dành cho chuyển phát nhanh" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Ghi chú nội bọ chuyển phát nhanh" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Ghi chú nội bộ sử dụng cho chuyển phát nhanh" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Liên kết thông tin địa chỉ (bên ngoài)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Sản phẩm nhà sản xuất" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "Sản phẩm cơ bản" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Chọn sản phẩm" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Chọn nhà sản xuất" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "Mã số nhà sản xuất" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL cho liên kết sản phẩm của nhà sản xuất bên ngoài" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Mô tả sản phẩm của nhà sản xuất" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Đơn vị đóng gói phải tương thích với đơn vị sản phẩm cơ bản" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Đơn vị đóng gói phải lớn hơn không" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Sản phẩm nhà sản xuất đã liên kết phải tham chiếu với sản phẩm cơ bản tương tự" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Nhà cung cấp" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "Chọn nhà cung cấp" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Đơn vị quản lý kho nhà cung cấp" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Chọn sản phẩm của nhà sản xuất" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL cho liên kết sản phẩm của nhà cung cấp bên ngoài" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "Mô tả sản phẩm nhà cung cấp" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "chi phí cơ sở" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "Thu phí tối thiểu (vd: phí kho bãi)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "Đóng gói" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "Đóng gói sản phẩm" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Số lượng gói" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Tổng số lượng được cung cấp trong một gói đơn. Để trống cho các hàng hóa riêng lẻ." -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "nhiều" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "Đặt hàng nhiều" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Số lượng có sẵn từ nhà cung cấp" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "Sẵn hàng đã được cập nhật" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Ngày cập nhật cuối thông tin tồn kho" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" @@ -4316,7 +4323,7 @@ msgstr "Tiền tệ mặc định được sử dụng cho nhà cung cấp này" msgid "Company Name" msgstr "" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "Còn hàng" @@ -4452,7 +4459,7 @@ msgstr "" msgid "Selected field is read-only" msgstr "" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" @@ -4464,31 +4471,31 @@ msgstr "" msgid "Column" msgstr "" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Hợp lệ" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "Không rõ" @@ -4716,105 +4723,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "Tham chiếu đơn đặt" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "Tạo bởi" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "" + +#: order/api.py:234 +msgid "Updated After" +msgstr "" + +#: order/api.py:285 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "Đặt hàng" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "Sản phẩm nội bộ" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "Đã hoàn thành" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Đơn hàng" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "Đơn hàng" msgid "Sales Order" msgstr "Đơn đặt hàng" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "Tổng tiền" msgid "Total price for this order" msgstr "Tổng tiền cho đơn hàng hàng" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Tiền tệ đơn đặt hàng" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Tiền tệ cho đơn đặt này (để trống để sử dụng tiền mặc định)" @@ -4851,718 +4870,742 @@ msgstr "Tiền tệ cho đơn đặt này (để trống để sử dụng tiề msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Liên hệ không phù hợp với doanh nghiệp đã chọn" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Mô tả đơn đặt (tùy chọn)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "Mã dự án đã chọn cho đơn đặt hàng này" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "Liên kết đến trang bên ngoài" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ngày mục tiêu" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Ngày mong muốn giao được hàng. Đơn đặt sẽ quá hạn sau ngày này." -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "Ngày phát hành" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "Ngày đặt hàng đã phát hành" #: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Người dùng hoặc nhóm có trách nhiệm với đơn đặt này" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Đầu mối liên hệ của đơn đặt này" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "Địa chỉ công ty cho đơn đặt này" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "Mã đặt hàng" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "Trạng thái" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "Trạng thái đơn đặt mua" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Doanh nghiệp từ những hàng hóa đang được đặt mua" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Tham chiếu nhà cung cấp" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Mã tham chiếu đơn đặt nhà cung cấp" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "nhận bởi" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "Ngày đặt hàng đã được hoàn thiện" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "Đích đến" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Nhà cung cấp sản phẩm phải trùng với nhà cung cấp PO" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Mục dòng không phù hợp với đơn đặt mua" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Số lượng phải là số dương" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Khách hàng" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "Doanh nghiệp từ những hàng hóa đang được bán" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "Tham chiếu khách hàng " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "Mã tham chiếu đơn đặt của khách hàng" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "Ngày giao hàng" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "vận chuyển bằng" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "Những đơn hàng đang mở thì sẽ được đánh dấu là hoàn thành" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Đơn hàng không thể hoàn thành được vì vận chuyển chưa xong" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "Đơn hàng không thể hoàn thành được vì những khoản riêng chưa xong" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "Số lượng mặt hàng" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "Tham chiếu khoản riêng" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "Ghi chú khoản riêng" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Ngày mục tiêu cho khoản riêng này (để trống để sử dụng ngày mục tiêu từ đơn đặt)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "Mô tả khoản riêng (tùy chọn)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "Ngữ cảnh bổ sung" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "Đơn giá" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "Sản phẩm nhà cung cấp phải phù hợp với nhà cung cung cấp" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "Sản phẩm nhà cung cấp" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "Đã nhận" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "Số mục đã nhận" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "Giá mua" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "Giá đơn vị mua" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "Chỉ có thể gán sản phẩm có thể bán vào đơn đặt bán hàng" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "Giá bán" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "Giá bán đơn vị" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "Đã chuyển" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "Số lượng đã vận chuyển" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "Ngày vận chuyển" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "Ngày giao hàng" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "Ngày giao hàng của vận chuyển" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "Kiểm tra bởi" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "Người dùng đã kiểm tra vận chuyển này" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Vận chuyển" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "Mã vận chuyển" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "Số theo dõi" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "Thông tin theo dõi vận chuyển" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "Mã hóa đơn" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "Số tham chiếu liên kết với hóa đơn" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "Vận đơn đã được gửi đi" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "Vận đơn chưa có hàng hóa được phân bổ" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "Hàng trong kho chưa được giao" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "Không thể phân bổ hàng hóa vào cùng với dòng với sản phẩm khác" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "Không thể phân bổ hàng hóa vào một dòng mà không có sản phẩm nào" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Số lượng phân bổ không thể vượt quá số lượng của kho" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "Số lượng phân bổ phải lớn hơn 0" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "Số lượng phải là 1 cho hàng hóa sêri" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "Đơn bán hàng không phù hợp với vận đơn" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Vận đơn không phù hợp với đơn bán hàng" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "Dòng" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "Tham chiếu vận đơn của đơn hàng bán" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "Hàng hóa" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "Chọn hàng trong kho để phân bổ" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "Nhập số lượng phân kho" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "Tham chiếu đơn hàng trả lại" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "Công ty có hàng hóa sẽ được trả lại" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "Trạng thái đơn hàng trả lại" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "Chọn hàng hóa để trả lại từ khách hàng" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "Ngày nhận được" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "Kết quả" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "Kết quả cho hàng hóa dòng này" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "Chi phí gắn với hàng trả lại hoặc sửa chữa cho dòng hàng hóa này" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Sao chép thông số" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Mục dòng" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "Tên nhà cung cấp" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "Đơn đặt không thể bị hủy" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "Cho phép đơn đặt phải đóng lại cùng với các mục dòng hàng hóa chưa hoàn thành" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "Đơn đặt có dòng hàng hóa chưa hoàn thành" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "Đơn đặt là không được mở" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "Tiền tệ giá mua" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "Mã sản phẩm nội bộ" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "Sản phẩm nhà cung cấp phải được chỉ định" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "Đơn đặt mua phải được chỉ định" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "Nhà cung cấp phải phù hợp với đơn đặt mua" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "Đơn đặt mua phải phù hợp với nhà cung cấp" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "Mục dòng" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "Chọn vị trí đích cho hàng hóa đã nhận" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "Nhập mã lô cho hàng trong kho đang đến" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ngày hết hạn" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "Nhập số sê ri cho hàng trong kho đang đến" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "Mã vạch" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "Mã vạch đã quét" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "Mã vạch đã được dùng" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "Dòng hàng hóa phải được cung cấp" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "Vị trí đích phải được chỉ ra" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "Giá trị mã vạch đã cung cấp phải duy nhất" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "Vận đơn đã hoàn thành" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "Tiền tệ giá bán" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "Chưa cung cấp thông tin vận chuyển" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "Dòng hàng hóa chưa được gắn với đơn đặt này" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "Số lượng phải là số dương" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "Nhập số sê ri để phân bổ" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "Vận đơn đã được chuyển đi" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "Vận đơn không được gắn với đơn đặt này" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "Không tìm thấy số sê ri sau đây" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "Dòng riêng biệt đơn hàng trả lại" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "Line item không phù hợp với đơn hàng trả lại" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "Line item đã nhận được" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "Hàng hóa chỉ có thể được nhận theo đơn hàng đang trong tiến trình" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "Tiền tệ giá đồng hạng" @@ -5598,146 +5641,146 @@ msgstr "Hoàn tiền" msgid "Reject" msgstr "Từ chối" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Đơn đặt mua quá hạn" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Đơn đặt mua {po} quá hạn" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Đơn bán hàng quá hạn" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Đơn bán hàng {so} đã quá hạn" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "" @@ -5750,7 +5793,7 @@ msgstr "Danh mục sản phẩm" msgid "Part Categories" msgstr "Danh mục sản phẩm" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "Điểm bán mặc định" @@ -5778,7 +5821,7 @@ msgstr "Từ khóa mặc định cho sản phẩm trong danh mục này" msgid "Icon" msgstr "Biểu tượng" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Biểu tượng (tùy chọn)" @@ -5799,7 +5842,7 @@ msgstr "Giá trị mặc định" msgid "Default Parameter Value" msgstr "Giá trị tham số mặc định" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Nguyên liệu" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" +msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "Hàng trong kho với số sê ri này đã tồn tại" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN trùng lặp không được cho phép trong thiết lập sản phẩm" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "Sản phẩm với Tên, IPN và Duyệt lại đã tồn tại." -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "Sản phẩm không thể được phân vào danh mục sản phẩm có cấu trúc!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "Tên sản phẩm" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "Là Mẫu" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "Sản phẩm này có phải là sản phẩm mẫu?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "Đây có phải là 1 biến thể của sản phẩm khác?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "Biến thể của" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "Mô tả (không bắt buộc)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "Từ khóa" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "Từ khóa sản phẩm để cải thiện sự hiện diện trong kết quả tìm kiếm" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "Danh mục sản phẩm" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "Số phiên bản hoặc bản duyệt lại sản phẩm" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "Phiên bản" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "Hàng hóa này sẽ được cất vào đâu?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "Hết hạn mặc định" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "Thời gian hết hạn (theo ngày) để nhập kho hàng hóa cho sản phẩm này" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "Kho tối thiểu" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "Cấp độ kho tối thiểu được phép" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "Đơn vị đo cho sản phẩm này" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "Sản phẩm này có thể được dựng từ sản phẩm khác?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "Sản phẩm này có thể dùng để dựng các sản phẩm khác?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "Sản phẩm này có đang theo dõi cho hàng hóa duy nhất?" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "Sản phẩm này có thể mua được từ nhà cung ứng bên ngoài?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "Sản phẩm này có thể được bán cho khách hàng?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "Sản phẩm này đang hoạt động?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "Đây là sản phẩm ảo, ví dụ như sản phẩm phần mềm hay bản quyền?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "Giá trị tổng kiểm BOM" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "Giá trị tổng kiểm BOM đã được lưu" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "BOM kiểm tra bởi" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "Ngày kiểm tra BOM" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "Tạo người dùng" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "Trách nhiệm chủ sở hữu cho sản phẩm này" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "Bán nhiều" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "Tiền được dùng để làm đệm tính toán giá bán" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "Chi phí BOM tối thiểu" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối thiểu" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "Chi phí BOM tối đa" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối đa" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "Chi phí mua vào tối thiểu" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "Chi phí mua vào tối thiểu trong lịch sử" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "Chi phí mua tối đa" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "Chi phí thành phần sản phẩm tối đa trong lịch sử" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "Giá nội bộ tối thiểu" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "Chi phí tối thiểu dựa trên phá vỡ giá nội bộ" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "Giá nội bộ tối đa" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "Chi phí tối đa dựa trên phá vỡ giá nội bộ" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "Giá nhà cung ứng tối thiểu" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "Giá sản phẩm tối thiểu từ nhà cung ứng bên ngoài" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "Giá nhà cung ứng tối đa" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "Giá sản phẩm tối đã từ nhà cung ứng bên ngoài" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "Giá trị biến thể tối thiểu" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "Chi phí tối thiểu của sản phẩm biến thể đã tính" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "Chi phí biến thể tối đa" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "Chi phí tối đa của sản phẩm biến thể đã tính" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "Chi phí tối thiểu" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "Ghi đề chi phí tối thiểu" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "Chi phí tối đa" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "Ghi đề chi phí tối đa" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "Chi phí tối thiểu tính toán tổng thể" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "Chi phí tối đa tính toán tổng thể" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "Giá bán thấp nhất" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "Giá bán tối thiểu dựa trên phá giá" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "Giá bán cao nhất" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "Giá bán cao nhất dựa trên phá giá" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "Chi phí bán hàng tối thiểu" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "Giá bán hàng tối thiểu trong lịch sử" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "Giá bán hàng tối đa" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "Giá bán hàng tối đa trong lịch sử" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "Sản phẩm dành cho kiểm kê" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "Tổng số hàng" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "Số mục kho độc lậo tại thời điểm kiểm kê" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "Tống số kho tại thời điểm kiểm kê" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "Ngày" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "Kiểm kê đã thực hiện" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "Chi phí kho tối thiểu" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "Chi phí kho tối thiểu ước tính của kho đang có" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "Chi phí kho tối đa" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "Chi phí kho tối đa ước tính của kho đang có" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "Tên kiểm thử" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "Nhập tên cho kiểm thử" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "Mô tả kiểm thử" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "Nhập mô tả cho kiểm thử này" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "Bắt buộc" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "Kiểm thử này bắt buộc phải đạt?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "Giá trị bắt buộc" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "Kiểm thử này yêu cầu 1 giá trị khi thêm một kết quả kiểm thử?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "Yêu cầu đính kèm" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "Kiểm thử này yêu cầu tệp đính kèm khi thêm một kết quả kiểm thử?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "Chọn sản phẩm cha" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "Sản phẩm phụ" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "Chọn sản phẩm được dùng trong BOM" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "Số lượng BOM cho mục BOM này" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "Mục BOM này là tùy chọn" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Mục BOM này bị tiêu hao (không được theo dõi trong đơn đặt bản dựng)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "Tham chiếu mục BOM" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "Ghi chú mục BOM" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "Giá trị tổng kiểm" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "Giá trị tổng kiểm dòng BOM" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "Đã xác minh" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "Mục BOM này là hợp lệ" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "Nhận thừa hưởng" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Mục BOM này được thừa kế bởi BOM cho sản phẩm biến thể" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Hàng trong kho cho sản phẩm biến thể có thể được dùng bởi mục BOM này" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Số lượng phải là giá trị nguyên dùng cho sản phẩm có thể theo dõi được" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "Sản phẩm phụ phải được chỉ định" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "Sảm phẩm thay thế mục BOM" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "Sản phẩm thay thế không thể giống sản phẩm chủ đạo" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "Hàng hóa BOM cha" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "Sản phẩm thay thế" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "Sản phẩm 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "Sản phẩm 2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "Chọn sản phẩm liên quan" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "Không thể tạo mối quan hệ giữa một sản phẩm và chính nó" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "Đã tồn tại mối quan hệ trùng lặp" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Phụ mục" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "Loại tiền mua hàng của hàng hóa này" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "Sản phẩm gốc" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Chọn sản phẩm gốc để nhân bản" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Sao chép ảnh" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Sao chép hình ảnh từ sản phẩm gốc" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Sao chép BOM" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Sao chép định mức nguyên vật liệu từ sản phẩm gốc" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "Sao chép thông số" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Sao chép thông tin tham số từ sản phẩm gốc" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Sao chép ghi chú" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Sao chép ghi chú từ sản phẩm gốc" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Số liệu tồn kho ban đầu" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Chỉ ra số lượng tồn kho ban đầu cho sản phẩm. Nếu điền là không, không thêm kho nào." -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Vị trí kho ban đầu" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Chỉ định vị trí kho ban đầu cho sản phẩm này" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Chọn nhà sản xuất (hoặc để trống để bỏ qua)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Mã số nhà sản xuất" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Công ty đã chọn không phải là nhà cung ứng hợp lệ" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Công ty đã chọn không phải là nhà sản xuất hợp lệ" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Mã số nhà sản xuất khớp với MPN này đã tồn tại" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Mã số nhà cung cấp khớp với SKU này đã tồn tại" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "Tên danh mục" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "Đang dựng" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Hàng trong kho" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Tổng số lượng" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Nhân bản sản phẩm" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Sao chép dữ liệu ban đầu từ sản phẩm khác" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Số liệu kho ban đầu" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Tạo sản phẩm với số lượng tồn kho ban đầu" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Thông tin nhà cung cấp" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Thêm thông tin nhà cung cấp ban đầu cho sản phẩm này" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Sao chép thông số nhóm hàng" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Sao chép mẫu tham số từ nhóm sản phẩm được chọn" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Ảnh hiện có" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Tên tệp của ảnh sản phẩm hiện hữu" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Tệp hình ảnh không tồn tại" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Xác minh toàn bộ hóa đơn vật liệu" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Có thể dựng" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" msgstr "" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Giá thấp nhất" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Giá trị tính toán ghi đè cho giá tối thiểu" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Tiền tế giá tối thiểu" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Giá cao nhất" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Giá trị tính toán ghi đè cho giá tối đa" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Tiền tế giá tối đa" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "Cập nhật" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Cập nhật giá cho sản phẩm này" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Không thể chuyển đổi từ tiền tệ đã cung cấp cho {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Giá tối thiểu không được lớn hơn giá tối đa" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Giá tối đa không được nhỏ hơn giá tối thiểu" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Chọn sản phẩm để sao chép định mức nguyên vật liệu" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Xóa dữ liệu đã tồn tại" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Xóa mục BOM đã tồn tại trước khi sao chép" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Bao gồm thừa hưởng" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Bao gồm mục BOM được thừa hưởng từ sản phẩm mẫu" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Bỏ qua dòng không hợp lệ" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Bật tùy chọn này để bỏ qua dòng không hợp lệ" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Sao chép sản phẩm thay thế" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Sao chép sản phẩm thay thế khi nhân bản hàng hóa BOM" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Thông báo sắp hết hàng" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Kho có sẵn cho {part.name} đã mất dưới mức cấu hình tối thiểu" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -7580,64 +7620,77 @@ msgstr "Cung cấp khả năng quét mã vạch TME" msgid "The Supplier which acts as 'TME'" msgstr "Nhà cung cấp hoạt động như 'TME'" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "Cài đặt phần mở rộng thành công" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "Cài đặt phần bổ sung đến {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "" -#: plugin/installer.py:337 -msgid "Plugin uninstalling is disabled" -msgstr "" - -#: plugin/installer.py:341 -msgid "Plugin cannot be uninstalled as it is currently active" +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" msgstr "" #: plugin/installer.py:347 -msgid "Plugin cannot be uninstalled as it is mandatory" +msgid "Plugin uninstalling is disabled" msgstr "" -#: plugin/installer.py:352 -msgid "Plugin cannot be uninstalled as it is a sample plugin" +#: plugin/installer.py:351 +msgid "Plugin cannot be uninstalled as it is currently active" msgstr "" #: plugin/installer.py:357 +msgid "Plugin cannot be uninstalled as it is mandatory" +msgstr "" + +#: plugin/installer.py:362 +msgid "Plugin cannot be uninstalled as it is a sample plugin" +msgstr "" + +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "" @@ -7689,21 +7742,21 @@ msgstr "" msgid "Plugin" msgstr "Phần bổ sung" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Không tìm thấy tác giả" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Phần bổ sung '{p}' không tương thích với phiên bản InvenTree hiện tại {v}" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Phần bổ sung yêu cầu ít nhất phiên bản {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Phần bổ sung yêu cầu tối đa phiên bản {v}" @@ -7884,51 +7937,51 @@ msgstr "Cài đặt chưa được xác nhận" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "Tải lại đầy đủ" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "Buộc tải lại" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "Kích hoạt phần bổ sung" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "Kích hoạt phần bổ sung này" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "" @@ -8190,7 +8243,7 @@ msgstr "Tổng cộng" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Số sê-ri" @@ -8215,7 +8268,7 @@ msgstr "Báo cáo kiểm thử mặt hàng" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "Mục đã cài đặt" @@ -8248,184 +8301,196 @@ msgstr "Không có kết quả (bắt buộc)" msgid "No result" msgstr "Không có kết quả" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Tệp tin tài sản không tồn tại" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "Không tìm thấy tệp hình ảnh" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "thẻ part_image yêu cầu 1 thực thể sản phẩm" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "thẻ company_image yêu cầu một thực thể doanh nghiệp" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Mã trạng thái" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Địa điểm bên ngoài" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Cây sản phẩm" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Ngày hết hạn trước đó" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Ngày hết hạn sau đó" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "Ế" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Bắt buộc nhập số lượng" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Phải cung cấp sản phẩm hợp lệ" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Sản phẩm nhà cung cấp đã đưa không tồn tại" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Sản phẩm nhà cung cấp có kích thước đóng gói được định nghĩa nhưng cờ use_pack_size chưa được thiết lập" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Số sê-ri không thê được cung cấp cho sản phẩm không thể theo dõi" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" msgstr "" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" msgstr "" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" msgstr "" @@ -8441,7 +8506,7 @@ msgstr "Loại vị trí kho hàng" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Biểu tượng mặc định cho vị trí không được đặt biểu tượng (tùy chọn)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Kho hàng" @@ -8449,11 +8514,11 @@ msgstr "Kho hàng" msgid "Stock Locations" msgstr "Vị trí kho hàng" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Chủ sở hữu" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Chọn chủ sở hữu" @@ -8481,274 +8546,274 @@ msgstr "Loại vị trí kho hàng của địa điểm này" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Bạn không thể chuyển đổi vị trí kho hàng này thành cấu trúc vì đã có hàng hóa trong kho được đặt vào bên trong nó!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Không thể đặt hàng trong kho vào trong địa điểm kho có cấu trúc!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "Không thể tạo hàng hóa trong kho cho sản phẩm ảo" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Loại sản phẩm ('{self.supplier_part.part}') phải là {self.part}" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Số lượng phải là 1 cho hàng hóa với số sê ri" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Số sê ri không thể đặt được nếu số lượng lớn hơn 1" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Hàng hóa không thể thuộc về chính nó" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Hàng hóa phải có 1 tham chiếu bản dựng nếu is_building=True" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Tham chiếu bản dựng không thể trỏ vào cùng một đối tượng sản phẩm" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Hàng trong kho cha" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "Sản phẩm cơ bản" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Chọn sản phẩm nhà cung cấp khớp với hàng hóa trong kho này" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Hàng trong kho này được đặt ở đâu?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "Đóng gói hàng hóa này được lưu trữ lại" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "Đã cài đặt trong" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Mục này đã được cài đặt trong mục khác?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Số sê ri cho mục này" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "Mã lô cho hàng trong kho này" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Số lượng tồn kho" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "Bản dựng nguồn" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Bản dựng cho hàng hóa này" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Tiêu thụ bởi" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Đơn đặt bản dựng đã dùng hàng hóa này" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Đơn đặt mua nguồn" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Đơn đặt mua cho hàng hóa này" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Đơn hàng bán đích" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Ngày hết hạn của hàng hóa này. Kho sẽ được nhắc tình trạng hết hạn sau ngày này" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Xóa khi thiếu hụt" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Xóa hàng trong kho này khi kho hàng bị thiếu hụt" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Giá mua riêng lẻ tại thời điểm mua" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Đã chuyển đổi sang sản phẩm" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Chưa đặt sản phẩm thành có thể theo dõi" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Số lượng phải là số nguyên" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Số lượng không thể vượt quá số lượng trong kho đang có ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Số lượng không khớp với số sêri" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Hàng trong kho đã được gán vào đơn hàng bán" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Hàng trong kho đã được cài đặt vào hàng hóa khác" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Hàng trong kho chứa hàng hóa khác" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Hàng trong kho đã được gắn với một khách hàng" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Hàng trong kho hiện đang sản xuất" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Không thể hợp nhất kho nối tiếp" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "Mặt hàng trùng lặp" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Mặt hàng phải tham chiếu đến sản phẩm tương tự" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Mặt hàng phải tham chiếu đến sản phẩm nhà cung cấp tương tự" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Mã trạng thái kho phải phù hợp" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Không thể xóa mặt hàng không ở trong kho" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Ghi chú đầu vào" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Phải cung cấp giá trị cho kiểm thử này" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Phải tải liên đính kèm cho kiểm thử này" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "Kết quả kiểm thử" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "Giá trị đầu ra kiểm thử" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "Đính kèm kết quả kiểm thử" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "Ghi chú kiểm thử" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8792,246 +8857,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "Mục cha" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Sử dụng kích thước đóng gói khi thêm: Số lượng được định nghĩa là số của gói" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "Điền số sêri cho hàng hóa mới" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "Số hiệu hàng hoá nhà cung cấp" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "Đã hết hạn" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "Mục con" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "Giá mua của mặt hàng, theo đơn vị hoặc gói" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "Nhập số của mặt hàng cần tạo số nối tiếp" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Số lượng phải không vượt quá số lượng trong kho đang có ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "Vị trí kho đích" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "Không thể gán số sêri cho sản phẩm này" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "Số sêri đã tồn tại" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "Chọn mặt hàng để lắp đặt" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "Số lượng để cài đặt" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "Nhập số lượng hàng hóa để cài đặt" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "Thêm ghi chú giao dịch (tùy chọn)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "Số lượng cần cài đặt phải ít nhất là 1" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "Mặt hàng không khả dụng" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "Sản phẩm đã chọn không có trong hóa đơn vật liệu" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "Số lượng cần lắp đặt phải không vượt quá số lượng đang có" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "Vị trí đích cho hàng hóa bị gỡ bỏ" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "Chọn sản phẩm để chuyển đổi mặt hàng vào bên trong" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "Sản phẩm đã chọn không phải là tùy chọn hợp lệ để chuyển đổi" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Không thể chuyển đổi hàng hóa với sản phẩm nhà cung cấp đã gán" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "Mã trạng thái mặt hàng" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "Chọn mặt hàng để đổi trạng thái" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "Không có mặt hàng nào được chọn" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "Kho phụ" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "Sản phẩm phải có thể bán được" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "Hàng hóa được phân bổ đến một đơn hàng bán" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "Hàng hóa được phân bổ đến một đơn đặt bản dựng" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "Khách hàng được gán vào các mặt hàng" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "Công ty đã chọn không phải là khách hàng" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "Ghi chú phân bổ kho" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "Phải cung cấp danh sách mặt hàng" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "Ghi chú gộp kho" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "Cho phép nhiều nhà cung không khớp" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "Cho phép mặt hàng cùng sản phẩm nhà cung cấp khác phải được gộp" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "Cho phép trạng thái không khớp" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "Cho phép mặt hàng với mã trạng thái khác nhau để gộp lại" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "Cần cung cấp ít nhất hai mặt hàng" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "Giá trị khóa chính mặt hàng" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "Ghi chú giao dịch kho" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "" @@ -9537,59 +9602,75 @@ msgstr "Tên người dùng" msgid "Email address of the user" msgstr "Địa chỉ email của người dùng" -#: users/serializers.py:309 -msgid "Staff" -msgstr "Nhân viên" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "Người dùng có quyền nhân viên" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "Superuser" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "Người dùng này là superuser" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "Tài khoản người dùng đang hoạt động" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "Tài khoản của bạn đã được tạo." -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "Xin hãy sử dụng chức năng tạo lại mật khẩu để đăng nhập" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "Chào mừng đến với InvenTree" diff --git a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po index 274c9fe672..96c5b8193e 100644 --- a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 20:21\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "未找到 API 端点" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "批量操作必须提供物品或过滤器列表" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "批量操作必须提供物料清单" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "必须以列表形式提供项目" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "提供了无效的单位" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "必须以字典形式提供筛选器" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "提供了无效的过滤器" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "所有过滤器只能使用true" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "没有符合所供条件的项目" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "未提供数据" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "此字段的值必须是唯一的。" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "用户没有权限查阅当前模型。" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "不能将 {original} 转换到 {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "提供的数量无效" @@ -112,13 +104,13 @@ msgstr "输入日期" msgid "Invalid decimal value" msgstr "无效的数值" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "备注" @@ -131,75 +123,91 @@ msgstr "值' {name}' 未出现在模式格式中" msgid "Provided value does not match required pattern: " msgstr "提供的值与所需模式不匹配:" -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "无法一次序列化超过 1000 个项目" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "序列号为空白" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "重复的序列号" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "无效群组: {group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "组范围 {group} 超出了允许的数量 ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "未找到序列号" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "唯一序列号 ({n}) 必须匹配数量 ({q})" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "从这个值中删除 HTML 标签" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "数据包含禁止的 markdown 内容" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "连接错误" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "服务器响应状态码无效" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "发生异常" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "服务器响应的内容长度值无效" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "图片尺寸过大" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "图片下载超出最大尺寸" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "远程服务器返回了空响应" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一个有效的图片文件" @@ -207,11 +215,11 @@ msgstr "提供的 URL 不是一个有效的图片文件" msgid "Log in to the app" msgstr "登录应用程序" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "电子邮件" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "您必须启用双重身份验证才能进行后续操作。" @@ -259,18 +267,18 @@ msgstr "参考编号过大" msgid "Invalid choice" msgstr "无效选项" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "名称" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "描述" msgid "Description (optional)" msgstr "描述(选填)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "路径" @@ -313,75 +321,66 @@ msgstr "条码数据的唯一哈希值" msgid "Existing barcode found" msgstr "检测到已存在条码" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "任务失败" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "后台工作任务“{f}”在 {n} 次尝试后失败" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "服务器错误" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "服务器记录了一个错误。" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "图像" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "必须是有效数字" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "货币" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "从可用选项中选择货币" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." msgstr "此字段不能为空。" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "无效值" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "远程图片" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "远程图片文件的 URL" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "未启用从远程 URL下载图片" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "从远程URL下载图像失败" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" msgstr "无效的内容类型格式" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" msgstr "未找到内容类型" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" msgstr "内容类型不匹配所需的 mixin 类" @@ -537,11 +536,11 @@ msgstr "中文 (简体)" msgid "Chinese (Traditional)" msgstr "中文 (繁体)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "有可用更新" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "InvenTree有可用更新" @@ -553,30 +552,30 @@ msgstr "无效的物理单位" msgid "Not a valid currency code" msgstr "无效的货币代码" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "订单状态" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "父级生产订单" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "包含变体" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "包含变体" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "包含变体" msgid "Part" msgstr "零件" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "类别" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "可测试部分" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "分配给我" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "负责人" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "创建时间早于" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "创建时间晚于" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "有开始日期" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "开始日期早于" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "开始日期晚于" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "有目标日期" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "目标日期早于" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "目标日期晚于" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "完成日期早于" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "完成日期晚于" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "最小日期" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "最大日期" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "排除树" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "生产订单必须取消后才能删除" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "耗材" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "可选项" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "装配件" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "可追溯" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "需检测" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "未结算订单" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "已分配" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "已消耗" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "可用数量" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "已订购" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "未找到版本" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "生产订单" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "库存位置" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "产出" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "按产出库存项ID筛选,使用“null”查找未安装的生产项。" @@ -748,41 +751,41 @@ msgstr "按产出库存项ID筛选,使用“null”查找未安装的生产项 msgid "Build Orders" msgstr "生产订单" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "装配物料清单尚未验证" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "无法为未激活的零件创建生产订单" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "无法为已解锁的零件创建生产订单" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "生产订单仅能通过外部采购可购买零件来完成" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "必须指定负责的用户或组" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "生产订单关联零件不可变更" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "目标日期必须在开始日期之后" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "生产订单编号" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "生产订单编号" msgid "Reference" msgstr "编号" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "生产订单的简要说明(可选)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "该生产订单所属的上级生产订单" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "选择要生产的零件" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "销售订单编号" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "该生产订单关联的销售订单" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "源库位" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "指定本次生产领料的来源库位(留空可从任意库位调拨)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "外协生产" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "该生产订单由外部供应商完成" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "目标库位" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "选择生产完成品的存放库位" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "生产数量" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "需要生产的库存品数量" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "已完成项目" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "已完成并入库的库存物品数量" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "生产状态" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "批号" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "本批产出的批次编号" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "建立日期" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "生产开始日期" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "此生产订单的计划开始日期" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "计划完成日期" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "生产订单的计划完成时间,逾期后系统将标记为超期。" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "完成日期" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "完成人" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "发起人" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "创建该生产订单的用户" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "责任方" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "该生产订单的责任人或责任团队" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "外部链接" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "指向外部资源的URL链接" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "生产优先级" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "此生产订单的优先级" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "项目编号" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "该生产订单归属的项目编号" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "无法完成生产订单,存在未关闭的子生产订单" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "无法完成生产订单,存在未完成的产出项" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "生产分配任务卸载失败" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "生产订单 {build} 已完成" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "生产订单已完成" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "可追溯零件必须填写序列号" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "未指定产出" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "产出已完成" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "产出与生产订单不匹配" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "数量必须大于零" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "数量不能大于产出数量" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "产出未通过所有必要测试" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "产出 {serial} 未通过所有必要测试" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" -msgstr "" +msgstr "已分配的库存物料仍在生产中" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "存在已分配物料时无法部分完成生产输出" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "生产订单行项目" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "生产对象" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "生产对象" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "数量" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "生产订单所需数量" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "库存消耗量" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生产项必须指定产出,因为主零件已经被标记为可追踪的" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "所选库存项与物料清单行项不匹配" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "分配的数量必须大于零" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "序列化物料的数量必须为1" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "库存品项超额分配" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "库存项" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "源库存项" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "分配给该生产任务的库存量" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "安裝到" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "目标库存项" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "生产等级" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "零件名称" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "产出" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "生产产出与上级订单不匹配" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "产出零件与生产订单零件不匹配" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "此产出已经完成" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "此产出尚未完全分配" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "输入产出数量" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "可追踪的零件数量必须为整数" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因为物料清单包含可追踪的零件,所以数量必须为整数" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "序列号" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "输入产出的序列号" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "生产产出的库存地点" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "自动分配序列号" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "自动为所需项目分配对应的序列号" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "以下序列号已存在或无效" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "必须提供产出清单" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "报废品库存地点" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "放弃分配" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消对报废产品的库存分配" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "废品产出的原因" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "完工产出存放库位" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果库存尚未全部分配,则完成产出" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "消耗已分配库存" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "立即扣除已分配给该生产任务的库存" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "移除未完成的产出" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "删除所有未完成的产出" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "禁止操作" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "标记为当前生产订单消耗" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "完成此生产订单前取消分配" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "超额分配库存" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何处理分配给生产订单的超额库存" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "存在超额分配的库存项" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受库存项未被完全分配至生产订单" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "必需库存未完成全量分配" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "接受未完工" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "允许所需数量的产出未完成" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "生产需求数量未完成" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "生产订单有打开的子生产订单" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "生产订单必须处于生产状态" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "生产订单有未完成的产出" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "生产行" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "产出" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "生产产出必须指向相同的生产" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "生产行项目" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必须与生产订单零件相同" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "项目必须在库存中" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "对于被追踪的零件的分配,必须指定生产产出" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "对于未被追踪的零件,无法指定生产产出" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "必须提供分配项目" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件来源的库存地点(留空则可来源于任何库存地点)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "从该选定的库存地点排除库存项" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "可互换库存" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多个位置的库存项目可以互换使用" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "替代品库存" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "允许分配可替换的零件" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "可选项目" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "分配可选的物料清单给生产订单" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" -msgstr "" +msgstr "所有物料" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" -msgstr "" +msgstr "未跟踪的物品" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "已跟踪的物品" #: build/serializers.py:1125 -msgid "Tracked Items" -msgstr "" - -#: build/serializers.py:1127 msgid "Item Type" -msgstr "" +msgstr "物品类型" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" -msgstr "" +msgstr "选择要自动分配的条目类型" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "启动自动分配任务失败" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "物料清单参考" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "物料清单零件识别号码" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "物料清单零件名称" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" -msgstr "" +msgstr "安裝到" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "生产" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "供应商零件" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "已分配数量" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "生产订单编号" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "零件类别名称" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "可追踪" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "已继承的" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "允许变体" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "物料清单项" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "生产中" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "生产计划" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "外部库存" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "可用库存" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "可用的替代品库存" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "可用的变体库存" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗数量超过分配数量" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "库存消耗可选备注" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "生产物料项必须关联到正确的生产订单" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "重复的生产物料项分配" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "订单行项目必须关联到正确的生产订单" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "重复的订单行项目分配" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "必须提供至少一个物料项或行项目" @@ -1495,43 +1494,43 @@ msgstr "已暂停" msgid "Cancelled" msgstr "已取消" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "完成" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "生产订单所需库存" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "生产订单{build}需补充库存" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "逾期的生产订单" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "生产订单 {bo} 现已逾期" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "是否链接" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "是否为文件" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "用户没有权限删除此附件" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "用户没有权限删除此附件" @@ -1555,794 +1554,794 @@ msgstr "暂无插件" msgid "Project Code Label" msgstr "项目编号标签" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "已是最新" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "最后更新时间戳" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "更新于" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "上次修改该对象的用户" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "唯一项目编码" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "项目描述" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "负责此项目的用户或团队" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "设置密钥" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "设定值" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "所选值不是一个有效的选项" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "该值必须是布尔值" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "该值必须为整数" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "必须是有效数字" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "值未通过验证检查" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "键字符串必须是唯一的" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "使用者" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "批发价数量" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "价格" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "指定数量的单位价格" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "端点" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "接收此网络钩子的端点" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "此网络钩子的名称" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "激活" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "网络钩子是否已启用" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "令牌" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "访问令牌" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "密钥" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "HMAC共享密钥" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "消息ID" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "此邮件的唯一标识符" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "主机" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "接收此消息的主机" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "标题" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "此消息的标题" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "正文" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "此消息的正文" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "接收此消息的终点" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "工作于" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "这条消息的工作完成了吗?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "标识" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "标题" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "链接" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "已发布" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "作者" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "摘要" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "阅读" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "这条新闻被阅读了吗?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "图像文件" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "此图像的目标模型类型" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "此图像的目标型号ID" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "自定义单位" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "单位符号必须唯一" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "单位名称必须是有效的标识符" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "单位名称" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "符号" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "可选单位符号" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "定义" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "单位定义" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "附件" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "缺少文件" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "缺少外部链接" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "模型类型" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "图片的目标模型类型" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "选择附件" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "备注" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "附件备注" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "上传日期" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "上传文件的日期" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "文件大小" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "文件大小,以字节为单位" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "为附件指定的模型类型无效" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "自定状态" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "定制状态" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "参考状态设置" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "使用此自定义状态扩展状态的状态集" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "逻辑密钥" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "等同于商业逻辑中自定义状态的状态逻辑键" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "值" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "将保存至模型数据库的数值" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "状态名" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "标签" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "将在前端显示的标签" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "颜色" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "将在前端显示颜色" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "型号" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "该状态关联的模型" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "必须选定模型" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "必须选取密钥" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "必须选中逻辑密钥" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "密钥必须不同于逻辑密钥" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "必须提供有效的参考状态类" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "密钥必须不同于参考状态的逻辑密钥" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "逻辑密钥必须在参考状态的逻辑键中" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "名称必须不同于参考状态的名称" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "选择列表" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "选择列表" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "选择列表的名称" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "选择列表的描述" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "已锁定" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "此选择列表是否已锁定?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "能否使用此选择列表?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "源插件" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "提供选择列表的插件" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "源字符串" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "可选字符串,用于标识本列表的数据来源" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "缺省项" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "本选择列表的默认选项" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "已创建" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "选择列表的创建日期和时间" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "最近更新" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "选择列表的最后更新时间" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "选择列表项" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "选择列表项" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "此选项归属的选择列表" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "选择列表项的值" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "选择列表项的标签" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "选择列表项的描述" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "该选择列表项是否处于激活状态?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "参数模板" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "参数模板" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "勾选框参数不能有单位" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "复选框参数不能有选项" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "选择必须是唯一的" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "参数模板名称必须是唯一的" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "此参数模板的目标模型类型" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "参数名称" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "单位" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "此参数的物理单位" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "参数说明" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "勾选框" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "此参数是否为勾选框?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "选项" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "此参数的有效选择 (逗号分隔)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "此参数的选择列表" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "已启用" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "此参数模板是否启用?" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" msgstr "参数" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" msgstr "参数" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "无效的参数值选择" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "为附件指定的模型类型无效" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "型号ID" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "此参数的目标模型的 ID" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "模板" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "参数模板" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "数据" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "参数值" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "备注" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "可选注释字段" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "扫描条码" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "条码数据" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "扫描条码的用户" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "时间戳" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "扫描条形码的日期和时间" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "处理条码的 URL 端点" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "上下文" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "扫描条形码的上下文数据" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "响应" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "扫描条形码的响应数据" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "结果" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "条码扫描成功吗?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "发生错误" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8:邮件日志删除受保护。需设置 INVENTREE_PROTECT_EMAIL_LOG 为 False 以允许删除。" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "电子邮件信息" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "电子邮箱信息" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "已发布" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "已发送" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "失败" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "已送达" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "已确认" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "入站" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "出站" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "暂无回复消息" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "跟踪交付" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "已读追踪" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "点击追踪" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "全局ID" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "此消息的标识符 (可能由外部系统提供)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "主题 ID" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "此消息主题的标识符 (可能由外部系统提供)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "主题" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "链接到此消息的主题" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" msgstr "优先" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "邮件主题" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "邮件主题" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "键" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "此主题的唯一密钥 (用于识别主题)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "此主题的唯一标识符" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "内部服务已启动" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "该线程是否为内部启动的?" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "创建主题的日期和时间" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "主题最后更新的日期和时间" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} 已取消" msgid "A order that is assigned to you was canceled" msgstr "分配给您的订单已取消" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "收到的物品" @@ -2392,1235 +2391,1243 @@ msgstr "表示设置是否被环境变量覆盖" msgid "Override" msgstr "覆盖" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "正在运行" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "等待完成的任务" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "预定的任务" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "失败的任务" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "任务ID" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "唯一任务ID" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "锁定" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "锁定时间" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "任务名称" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "功能" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "功能名称" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "参数" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "任务参数" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "关键字参数" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "任务关键词参数" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "文件名" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "模型类型" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "用户无权为此模式创建或编辑附件" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "用户没有权限为此模型创建或编辑参数" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "选择列表已锁定" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "无分组" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "网站 URL 已配置为锁定" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "需要重启" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "设置已更改,需要服务器重启" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "等待迁移" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "待处理的数据库迁移数" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "活动的警告代码" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "活跃警告代码的字典" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "实例ID" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "此 InvenTree 实例的唯一标识符" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "公告 ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "在服务器状态信息中公开实例ID(未认证状态下)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "服务器实例名称" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "服务器实例的字符串描述符" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "使用实例名称" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "在标题栏中使用实例名称" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "限制显示 `关于` 信息" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "只向超级管理员显示关于信息" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "公司名称" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "内部公司名称" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "基本 URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "服务器实例的基准 URL" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "默认货币" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "系统价格计算使用的基准货币" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "支持币种" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "支持的货币代码列表" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "货币更新间隔时间" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "检查更新的频率(设置为零以禁用)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "天" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "币种更新插件" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "使用货币更新插件" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "从URL下载" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "允许从外部 URL 下载远程图片和文件" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "下载大小限制" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "远程图片的最大允许下载大小" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "用于从 URL 下载的 User-agent" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "允许覆盖用于从外部 URL 下载图片和文件的 user-agent(留空为默认值)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "严格的 URL 验证" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "验证 URL 时需要 schema 规范" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "更新检查间隔" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "检查更新的频率(设置为零以禁用)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "自动备份" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "启用数据库和媒体文件的自动备份" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "自动备份间隔" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "指定自动备份之间的间隔天数" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "任务删除间隔" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "后台任务结果将在指定天数后删除" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "错误日志删除间隔" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "错误日志将在指定天数后被删除" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "通知删除间隔" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "用户通知将在指定天数后被删除" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "邮件自动清理周期" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "邮件将在指定天数后删除" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "保护邮件日志" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "防止邮件日志条目被删除" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "条形码支持" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "在网页界面启用条形码扫描器支持" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "存储条形码结果" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "存储条形码扫描结果" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "条形码扫描最大计数" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "保存的条形码扫描结果的最大数量" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "条形码扫描延迟设置" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "条形码输入处理延迟时间" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "启用摄像头扫码支持" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "允许通过网络摄像头扫描条形码" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "显示条形码数据" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "在浏览器中将条形码数据显示为文本" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "条形码生成插件" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "用于内部条形码数据生成的插件" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "零件修订" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "启用零件修订字段" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "仅限装配修订版本" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "仅允许对装配零件进行修订" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "允许从装配中删除" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "允许删除已在装配中使用的零件" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "IPN(内部零件号)正则规则" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "用于匹配IPN(内部零件号)格式的正则表达式" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "允许重复的 IPN(内部零件号)" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "允许多个零件共享相同的 IPN(内部零件号)" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "允许编辑 IPN(内部零件号)" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "允许编辑零件时更改IPN(内部零件号)" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "复制零件物料清单数据" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "复制零件时默认复制物料清单数据" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "复制零件参数数据" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "复制零件时默认复制参数数据" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "复制零件测试数据" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "复制零件时默认复制测试数据" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "复制类别参数模板" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "创建零件时复制类别参数模板" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "零件默认为模板" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "默认情况下,元件可由其他零件组装而成" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "组件" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "默认情况下,零件可用作子部件" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "可购买" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "默认情况下可购买零件" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "可销售" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "零件默认为可销售" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "默认情况下可跟踪零件" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "虚拟的" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "默认情况下,零件是虚拟的" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "显示关联零件" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "显示零件的关联零件" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "允许创建初始库存" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "允许在添加新零件时创建初始库存数据" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "允许创建供应商数据" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "允许在添加新零件时创建初始供应商数据" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "零件名称显示格式" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "显示零件名称的格式" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "零件类别默认图标" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "零件类别默认图标 (空表示没有图标)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "最小定价小数位数" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "呈现定价数据时显示的最小小数位数" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "最大定价小数位数" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "呈现定价数据时显示的最大小数位数" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "使用供应商定价" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "将供应商的批发价纳入整体价格计算" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "采购历史价优先" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "当存在历史采购订单价格时,将忽略供应商的批发价" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "使用库存项定价" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "使用手动输入的库存数据进行定价计算" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "库存项目定价时间" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "从定价计算中排除超过此天数的库存项目" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "使用变体定价" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "将产品变体的特殊定价纳入整体价格计算" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "仅限活跃变体" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "仅使用活跃变体零件计算变体价格" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "自动更新定价" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "当内部数据变化时自动更新零件价格" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "价格重建间隔" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "零件价格自动更新前的天数" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "内部价格" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "为零件启用内部核算价格功能" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "内部价格优先" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "若存在内部价格,将覆盖BOM价格区间计算结果" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "允许BOM数量为零" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "允许 BOM 物料项的数量为零。启用后可使用装配 / 设置数量定义单次构建所需用量,与构建总数量无关" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "启用标签打印功能" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "启用从网络界面打印标签" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "标签图片 DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "生成图像文件以供标签打印插件使用时的 DPI 分辨率" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "启用报告" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "启用报告生成" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "调试模式" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "以调试模式生成报告(HTML 输出)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "日志错误报告" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "记录生成报告时出现的错误" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "页面大小" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "PDF 报告默认页面大小" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "强制参数单位" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "如果提供了单位,参数值必须与指定的单位匹配" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "全局唯一序列号" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "库存项的序列号必须全局唯一" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "删除已耗尽的库存" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "设置库存耗尽时的默认行为" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "批号模板" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "为库存项生成默认批号的模板" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "库存过期" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "启用库存过期功能" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "销售过期库存" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "允许销售过期库存" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "库存临期预警天数" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "库存项过期前被标记为\"临期\"的天数" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "允许使用过期库存" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "允许在生产中使用已过期的库存" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "库存所有权管控" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "启用对库存地点和库存物品的归属权管理" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "库存地点默认图标" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "库存地点默认图标 (空表示没有图标)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "显示已安装的库存项" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "在库存列表中显示已被安装到设备中的库存项" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "在安装项目时检查物料清单" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "已安装的库存项目必须存在于上级零件的物料清单中" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "允许零库存调拨" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "允许对当前库存量为零的物品执行库位间调拨操作" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "生产订单参考模式" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "生成生产订单参考字段所需的模式" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "要求负责人" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "必须为每个订单分配一个负责人" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "需要活动零件" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "防止为非活动零件创建生产订单" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "需要锁定零件" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "防止为未锁定的零件创建生产订单" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "需要有效的物料清单" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "除非物料清单已验证,否则禁止创建生产订单" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "需要关闭子订单" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "在所有子订单关闭之前,阻止生产订单的完成" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "外部生产订单" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "启用外部生产订单功能" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "阻止直到测试通过" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "在所有必要的测试通过之前,阻止产出完成" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "启用订单退货" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "在用户界面中启用订单退货功能" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "退货订单参考模式" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "生成退货订单参考字段所需的模式" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "编辑已完成的退货订单" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "允许编辑已完成的退货订单" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "销售订单参考模式" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "生成销售订单参考字段所需参照模式" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "销售订单默认配送方式" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "启用创建销售订单的默认配送功能" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "编辑已完成的销售订单" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "允许在订单配送或完成后编辑销售订单" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "货件需核对" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "只有所有物品均经核对,才能确认发货完成" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "标记该订单为已完成?" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "标记为已发货的销售订单将自动完成,绕过“已发货”状态" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "采购订单参考模式" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "生成采购订单参考字段所需的模式" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "编辑已完成的采购订单" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "允许在采购订单已配送或完成后编辑订单" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "货币转换" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "收货时将物料价值折算为基准货币" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "自动完成采购订单" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "当收到所有行项目时,自动将采购订单标记为完成" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "忘记启用密码" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "在登录页面上启用忘记密码功能" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "启用注册" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "在登录页面为用户启用自行注册功能" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "启用SSO登录" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "在登录页面启用单点登录(SSO)功能" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "启用SSO注册" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "允许用户通过登录页面的SSO系统注册账号" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "启用SSO组同步" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "启用后,将自动同步InvenTree用户组与身份提供商(IdP)提供的用户组" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "SSO组属性键" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "身份提供商(IdP)返回的组信息声明属性名称" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "SSO组映射关系" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "将SSO用户组映射到本地InvenTree用户组的对应关系表。如果本地组不存在,系统会自动创建对应的用户组。" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "移除非SSO来源的用户组" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "当用户组未被身份提供商(IdP)支持时,是否移除该用户组。禁用此选项可能导致安全风险" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "必须提供邮箱" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "用户注册时必须提供邮箱" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "自动填充SSO用户信息" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "自动从SSO账户数据中填充用户详细信息" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "发两次邮件" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "注册时询问用户他们的电子邮件两次" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "两次输入密码" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "当注册时请用户输入密码两次" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "域名白名单" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "限制注册到某些域名 (逗号分隔,以 @ 开头)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "注册默认分组" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "新用户注册时被分配的默认用户组。 如果启用了SSO组同步功能,当无法从身份提供商(IdP)分配组时才会应用此分组。" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "强制启用多因素安全认证" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "用户必须使用多因素安全认证。" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "启用此设置将要求所有用户设置多元素认证。所有会话将立即断开连接。" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "启动时检查插件" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "启动时检查全部插件是否已安装 - 在容器环境中启用" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "检查插件更新" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "启用定期检查已安装插件的更新" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "启用统一资源定位符集成" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "启用插件以添加统一资源定位符路由" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "启用导航集成" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "启用插件以集成到导航中" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "启用应用集成" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "启用插件添加应用" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "启用调度集成" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "启用插件来运行预定任务" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "启用事件集成" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "启用插件响应内部事件" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "启用界面集成" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "启用插件集成到用户界面" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "启用邮件集成" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "启用插件来处理发送/接收邮件" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "启用项目编码" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "启用项目编码来跟踪项目" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" -msgstr "" +msgstr "启用盘点" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "启用历史库存水平及价值记录功能" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "排除外部地点" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" -msgstr "" +msgstr "将外部库位的库存物料排除在盘点计算之外" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "自动盘点周期" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" -msgstr "" +msgstr "自动库存盘点记录的间隔天数" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" -msgstr "" +msgstr "删除旧的盘点记录条目" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1133 -msgid "Stocktake Deletion Interval" -msgstr "" - -#: common/setting/system.py:1135 -msgid "Stocktake entries will be deleted after specified number of days" -msgstr "" +msgstr "删除超过指定天数的库存盘点记录" #: common/setting/system.py:1142 -msgid "Delete Old Stock Tracking Entries" -msgstr "" +msgid "Stocktake Deletion Interval" +msgstr "库存盘点记录删除周期" #: common/setting/system.py:1144 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "库存盘点记录将在指定天数后自动删除" + +#: common/setting/system.py:1151 +msgid "Delete Old Stock Tracking Entries" +msgstr "删除旧的库存跟踪记录" + +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1150 -msgid "Stock Tracking Deletion Interval" -msgstr "" - -#: common/setting/system.py:1152 -msgid "Stock tracking entries will be deleted after specified number of days" -msgstr "" +msgstr "删除超过指定天数的库存跟踪记录" #: common/setting/system.py:1159 +msgid "Stock Tracking Deletion Interval" +msgstr "库存跟踪记录删除周期" + +#: common/setting/system.py:1161 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "库存跟踪记录将在指定天数后自动删除" + +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "显示用户全名" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "显示用户全名而不是用户名" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "显示用户配置" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "在用户个人资料页展示其档案信息" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "启用测试站数据" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "启用测试站数据收集以获取测试结果" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" msgstr "启用设备状态检测" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "启用定期 Ping 检测,确认注册设备的运行状态" @@ -3967,346 +3974,346 @@ msgstr "零件已激活" msgid "Manufacturer is Active" msgstr "制造商处于活动状态" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "供应商零件处于激活状态" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" -msgstr "" +msgstr "主供应商部件" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "内部零件已激活" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "供应商已激活" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "制造商" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "公司" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "有库存" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "公司" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "公司简介" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "公司简介" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "网站" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "公司网站" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "电话号码" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "联系电话" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "联系人电子邮箱地址" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "联系人" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "联络点" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "外部公司信息链接" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "这家公司是否激活?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "是客户" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "你是否向该公司出售商品?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "是否为供应商" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "你从这家公司买东西吗?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "是制造商吗" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "这家公司生产零件吗?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "此公司使用的默认货币" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "税号" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "公司税号" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "地址" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "地址" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "选择公司" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "地址标题" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "描述地址条目的标题" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "主要地址" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "设置主要地址" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "第1行" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "地址行1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "第2行" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "地址行2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "邮政编码" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "城市/地区" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "邮政编码城市/地区" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "省/市/自治区" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "省、自治区或直辖市" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "国家/地区" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "地址所在国家" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "快递运单" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "运输快递注意事项" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "内部装运通知单" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "内部使用的装运通知单" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "链接地址信息 (外部)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "制造商零件" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "基础零件" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "选择零件" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "选择制造商" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "制造商零件编号" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "制造商零件编号" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "外部制造商零件链接的URL" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "制造商零件说明" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "包装单位必须与基础零件单位兼容" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "包装单位必须大于零" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "链接的制造商零件必须引用相同的基础零件" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "供应商" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "选择供应商" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "供应商库存管理单位" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "此供应商零件是否处于活动状态?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" -msgstr "" +msgstr "主要的" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" -msgstr "" +msgstr "这是否为关联物料的主供应商物料?" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "选择制造商零件" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "外部供应商零件链接的URL" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "供应商零件说明" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "基本费用" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低费用(例如库存费)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "打包" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "零件打包" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "包装数量" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "单包供应的总数量。为单个项目留空。" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "多个" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "订购多个" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "供应商提供的数量" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "可用性已更新" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "上次更新可用性数据的日期" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "供应商批发价" @@ -4318,7 +4325,7 @@ msgstr "此供应商使用的默认货币" msgid "Company Name" msgstr "公司名称" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "有库存" @@ -4454,7 +4461,7 @@ msgstr "目标模型中不存在字段" msgid "Selected field is read-only" msgstr "所选字段为只读" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "导入会话" @@ -4466,31 +4473,31 @@ msgstr "字段" msgid "Column" msgstr "列" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "行索引" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "原始行数据" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "错误" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "有效" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "更新现有记录需要提供ID。" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "没有找到与提供的ID相关的记录" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "提供的ID格式无效" @@ -4590,7 +4597,7 @@ msgstr "每个标签要打印的份数" msgid "Connected" msgstr "已连接" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "未知" @@ -4718,105 +4725,117 @@ msgstr "最大进度" msgid "Maximum value for progress type, required if type=progress" msgstr "进度类型的最大值。当 type=progress 时为必填项" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "订单参考" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "未完成" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "有项目编码" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "创建人" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "创建时间早于" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "创建时间晚于" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "有开始日期" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "开始日期早于" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "开始日期晚于" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "有目标日期" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "目标日期早于" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "目标日期晚于" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "更新时间早于" + +#: order/api.py:234 +msgid "Updated After" +msgstr "更新时间晚于" + +#: order/api.py:285 msgid "Has Pricing" msgstr "有定价" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "完成时间早于" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "完成时间晚于" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "外部生产订单" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "订单" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "订单完成" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "内部零件" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "订单待定" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "已完成" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "有配送" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "未找到发货记录" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "采购订单" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4824,8 +4843,8 @@ msgstr "采购订单" msgid "Sales Order" msgstr "销售订单" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4841,11 +4860,11 @@ msgstr "总价格" msgid "Total price for this order" msgstr "此订单的总价" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "订单货币" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "此订单的货币 (留空以使用公司默认值)" @@ -4853,718 +4872,742 @@ msgstr "此订单的货币 (留空以使用公司默认值)" msgid "This order is locked and cannot be modified" msgstr "该订单已锁定,不可修改" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "联系人与所选公司不匹配" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "开始日期必须早于目标日期" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "地址与所选公司不匹配" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "订单描述 (可选)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "为此订单选择项目编码" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "链接到外部页面" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "开始日期" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "本订单的预定开始日期" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "预计日期" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "订单交付的预期日期。订单将在此日期后过期。" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "签发日期" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "订单发出日期" #: order/models.py:506 +msgid "Updated At" +msgstr "更新时间" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "负责此订单的用户或组" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "此订单的联系人" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "此订单的公司地址" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "订单参考" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "狀態" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "采购订单状态" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "订购物品的公司" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "供应商参考" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "供应商订单参考代码" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "接收人" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "订单完成日期" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "目的地" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "接收物品的目标" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "零件供应商必须与采购订单供应商匹配" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "行项目与采购订单不匹配" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "行项目缺少关联零件" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "数量必须是正数" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "序列号不能分配给虚拟件" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "客户" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "出售物品的公司" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "销售订单状态" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "客户参考 " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "客户订单参考代码" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "发货日期" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "发货人" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "订单已完成" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "订单已取消" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "只有未结订单才能标记为已完成" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "由于发货不完整,订单无法完成" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "由于缺货,订单无法完成" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "订单无法完成,因为行项目不完整" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "订单已锁定,不可修改" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "项目数量" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "行项目参考" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "行项目注释" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "此行项目的目标日期 (留空以使用订单中的目标日期)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "行项目描述 (可选)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "此行的附加上下文" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "单位价格" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "采购订单行项目" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "供应商零件必须与供应商匹配" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "生产订单必须标记为外部" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "生产订单仅可关联至装配零件" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "生产订单零件必须与行项目零件一致" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "供应商零件" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "已接收" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "收到的物品数量" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "采购价格" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "每单位的采购价格" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "外部生产订单需由此行项目履行" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "采购订单附加行" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "销售订单行项目" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "只有可销售的零件才能分配给销售订单" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "售出价格" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "单位售出价格" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "已配送" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "发货数量" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "销售订单发货" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" msgstr "收货地址必须与该客户的资料一致" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" msgstr "本次发货的收货地址" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "发货日期" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "送达日期" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "装运交货日期" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "审核人" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "检查此装运的用户" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "配送单号" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "跟踪单号" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "配送跟踪信息" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "发票编号" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "相关发票的参考号" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "货物已发出" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "发货没有分配库存项目" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "货件必须先经核对,方可标记为完成" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "销售订单加行" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "销售订单分配" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "库存项目尚未分配" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "无法将库存项目分配给具有不同零件的行" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "无法将库存分配给没有零件的生产线" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "分配数量不能超过库存数量" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "分配的数量必须大于零" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化库存项目的数量必须为1" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "销售订单与发货不匹配" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "发货与销售订单不匹配" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "行" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "销售订单发货参考" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "项目" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "选择要分配的库存项目" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "输入库存分配数量" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "退货订单参考" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "退回物品的公司" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "退货订单状态" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "退货订单行项目" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "必须指定库存项" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "退回数量超过库存数量" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "退回数量必须大于零" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "序列化库存项的数量无效" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "选择要从客户处退回的商品" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "接收日期" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "收到此退货的日期" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "结果" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "该行项目的结果" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "与此行项目的退货或维修相关的成本" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "退货订单附加行" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "订单ID" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "要复制的订单ID" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "复制行" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "从原始订单复制行项目" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "复制额外行" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "从原始订单复制额外的行项目" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "复制参数" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "从原始订单复制订单参数" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "行项目" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "已完成行项目" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "复制订单" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "指定复制此订单的选项" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "订单ID不正确" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "供应商名称" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "订单不能取消" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "允许关闭行项目不完整的订单" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "订单中的行项目不完整" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "订单未打开" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "自动定价" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根据供应商零件数据自动计算采购价格" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "购买价格货币" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "合并项目" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "将具有相同零件、目的地和目标日期的项目合并到一个行项目中" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "库存量单位" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "内部零件编号" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "内部零件名称" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "必须指定供应商零件" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "必须指定采购订单" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "供应商必须匹配采购订单" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "采购订单必须与供应商匹配" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "行项目" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "为收到的物品选择目的地位置" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "输入入库项目的批号" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "输入入库库存项的有效期" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "输入入库库存项目的序列号" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "覆盖传入库存项目的包装资料" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "传入库存项目的附加说明" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "条形码" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "扫描条形码" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "条形码已被使用" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "必须提供行项目" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "必须指定目标位置" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "提供的条形码值必须是唯一的" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "配送" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" -msgstr "" +msgstr "已分配的行" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "售出价格货币" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "已分配的项目" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "未提供装运详细信息" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "行项目与此订单不关联" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "数量必须为正" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "输入要分配的序列号" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "货物已发出" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "发货与此订单无关" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "未找到以下序列号的匹配项" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "以下序列号不可用" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "退货订单行项目" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "行项目与退货订单不匹配" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "行项目已收到" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "只能根据正在进行的订单接收物品" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "退货数量" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "行价格货币" @@ -5600,146 +5643,146 @@ msgstr "退款" msgid "Reject" msgstr "拒绝" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "逾期采购订单" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "采购订单 {po} 已逾期" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "逾期销售订单" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "销售订单 {so} 已逾期" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "逾期退货订单" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "退货订单 {ro} 现已逾期" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "已加星标" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "按星标类别筛选" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "深度" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "按类别深度筛选" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "顶级" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "按顶级类别筛选" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "级联" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "在筛选结果中包含子类别" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "父类" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "按父类别筛选" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "排除指定类别下的子类别" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "有结果" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "是变体" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "是修订版本" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "有修订版本" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "物料清单合规" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "级联分类" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "如果为真,则包含给定分类下的所有子分类中的项目" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "按数字分类ID或字面值 \"null\" 进行筛选" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" -msgstr "" +msgstr "装配零件已启用" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" -msgstr "" +msgstr "装配零件可追踪" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "装配部份是可测试的" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" -msgstr "" +msgstr "元器件已激活" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" -msgstr "" +msgstr "该零部件可追溯" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "组件部份是可测试的" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" -msgstr "" +msgstr "该零部件是一个装配件" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" -msgstr "" +msgstr "该零部件为虚拟件" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" -msgstr "" +msgstr "有可用库存" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "使用" @@ -5752,7 +5795,7 @@ msgstr "零件类别" msgid "Part Categories" msgstr "零件类别" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "默认位置" @@ -5780,7 +5823,7 @@ msgstr "此类别零件的默认关键字" msgid "Icon" msgstr "图标" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "图标(可选)" @@ -5801,7 +5844,7 @@ msgstr "默认值" msgid "Default Parameter Value" msgstr "默认参数值" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "零件" @@ -5845,981 +5888,978 @@ msgid "Part cannot be a revision of itself" msgstr "零件不能是对自身的修订" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "无法对已经是修订版本的零件进行修订" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "标记为带版本管理的物料必须指定版本代码" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "必须指定修订代码" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "修订仅对装配零件允许" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "无法对模版零件进行修订" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "上级零件必须指向相同的模版" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "该序列号库存项己存在" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "在零件设置中不允许重复的内部零件号" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "重复的零件修订版本已经存在。" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "有这个名字,内部零件号,和修订版本的零件已经存在" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "零件不能分配到结构性零件类别!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "零件名称" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "是模板" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "这个零件是一个模版零件吗?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "这个零件是另一零件的变体吗?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "变体" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "零件描述(可选)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "关键词" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索结果可见性的零件关键字" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "零件类别" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "内部零件号 IPN" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "零件修订版本或版本号" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "版本" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "这零件是另一零件的修订版本吗?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "修订版本" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "该物品通常存放在哪里?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "默认到期" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "此零件库存项的过期时间 (天)" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "最低库存" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "允许的最小库存量" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "此零件的计量单位" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "这个零件可由其他零件加工而成吗?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "这个零件可用于创建其他零件吗?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "此零件是否有唯一物品的追踪功能" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "这一部件能否记录到测试结果?" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "这个零件可从外部供应商购买吗?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "此零件可以销售给客户吗?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "这个零件是否已激活?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "无法编辑锁定的零件" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "这是一个虚拟零件,例如一个软件产品或许可证吗?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "物料清单已验证" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "该零件的物料清单是否通过验证?" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "物料清单校验和" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "保存的物料清单校验和" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "物料清单检查人" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "物料清单检查日期" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "此零件的负责人" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "出售多个" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "用于缓存定价计算的货币" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "最低物料清单成本" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "物料清单的最高成本" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "最低购买成本" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "最大购买成本" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "最低内部价格" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "基于内部批发价的最低成本" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "最大内部价格" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "基于内部批发价的最高成本" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "供应商最低价格" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "外部供应商零件的最低价格" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "供应商最高价格" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "来自外部供应商的商零件的最高价格" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "最小变体成本" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "计算出的变体零件的最低成本" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "最大变体成本" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "计算出的变体零件的最大成本" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "覆盖最低成本" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "覆盖最大成本" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "计算总最低成本" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "计算总最大成本" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "最低售出价格" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "基于批发价的最低售出价格" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "最高售出价格" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "基于批发价的最大售出价格" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "最低销售成本" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "历史最低售出价格" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "最高销售成本" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "历史最高售出价格" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "用于盘点的零件" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "物品数量" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "盘点时的个别库存条目数" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "盘点时可用库存总额" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "日期" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "进行盘点的日期" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "最低库存成本" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "现有存库存最低成本估算" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "最高库存成本" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "目前库存最高成本估算" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "零件售出价格折扣" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "零件测试模板" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名称无效 - 必须包含至少一个字母或者数字" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "测试模板只能为可拆分的部件创建" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主键的测试模板" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "测试名" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "输入测试的名称" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "测试主键" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "简化测试主键" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "测试说明" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "输入测试的描述" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "此测试是否已启用?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "必须的" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "需要此测试才能通过吗?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "添加测试结果时是否需要一个值?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加测试结果时是否需要文件附件?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "此测试的有效选择 (逗号分隔)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清单项目不能被修改 - 装配已锁定" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清单项目不能修改 - 变体装配已锁定" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "选择父零件" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "子零件" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "选择要用于物料清单的零件" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "此物料清单项目的数量" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "此物料清单项目是可选的" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "这个物料清单项目是耗材 (它没有在生产订单中被追踪)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "设置数量" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "为补偿生产准备损耗所需的额外数量" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "损耗" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "生产预估损耗率(百分比,0-100)" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "舍入倍数" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "将所需生产数量向上舍入至该值的最接近倍数" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "物料清单项目引用" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "物料清单项目注释" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "校验和" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "物料清单行校验和" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "已验证" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "此物料清单项目已验证" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "获取继承的" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清单项目是由物料清单继承的变体零件" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "变体零件的库存项可以用于此物料清单项目" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "可追踪零件的数量必须是整数" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "必须指定子零件" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "物料清单项目替代品" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能与主零件相同" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "上级物料清单项目" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "零件2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "选择相关的零件" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "此关系的注释" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "零件关系不能在零件和自身之间创建" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "复制关系已经存在" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "上级类别" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "上级零件类别" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "子类别" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "结果" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "根据该模板记录的结果数量" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "购买此库存项的货币" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "文件不是一个图片" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "选择要复制的原始零件" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "复制图片" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "从原零件复制图片" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "复制物料清单" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "从原始零件复制材料清单" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "复制参数" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "从原始零件复制参数数据" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "复制备注" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "从原始零件复制备注" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "复制测试" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "从原始零件复制测试模板" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "初始化库存数量" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始库存数量。如果数量为零,则不添加任何库存。" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "初始化库存地点" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的库存地点" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "选择供应商(或为空以跳过)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "选择制造商(或为空)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "制造商零件号" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "所选公司不是一个有效的供应商" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "所选公司不是一个有效的制造商" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "与此制造商零件编号 (MPN) 的相匹配的制造商零件已存在" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "匹配此库存单位 (SKU) 的供应商零件已存在" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "类别名称" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "正在生产" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "目前正在生产的零件数量" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件计划待产数量" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "库存项" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "修订" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "库存总量" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "未分配的库存" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "变体库存" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "重复零件" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "从另一个零件复制初始数据" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "初始库存" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "创建具有初始库存数量的零件" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "供应商信息" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供应商信息" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "复制类别参数" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "从选择的零件复制参数模版" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "现有的图片" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "现有零件图片的文件名" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "图片不存在" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "验证整个物料清单" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "可以创建" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "生产订单必填项" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "分配到生产订单" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "销售订单必填项" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "分配到销售订单" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" -msgstr "" +msgstr "内部零件号" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" -msgstr "" +msgstr "零件描述" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" -msgstr "" - -#: part/serializers.py:1298 -msgid "Select a category to include all parts within that category (and subcategories)" -msgstr "" - -#: part/serializers.py:1308 -msgid "Select a location to include all parts with stock in that location (including sub-locations)" -msgstr "" - -#: part/serializers.py:1315 -msgid "Generate Stocktake Entries" -msgstr "" +msgstr "选择一个物料,以生成该物料(及其所有变型物料)的盘点信息" #: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "选择一个分类,以包含该分类(及其子分类)下的所有物料" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "选择一个库位,以包含该库位(含子库位)中有库存的所有物料" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "生成盘点条目" + +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" -msgstr "" +msgstr "保存所选物料的盘点条目" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" -msgstr "" +msgstr "生成报告" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" -msgstr "" +msgstr "为所选物料生成盘点报告" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "最低价格" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "覆盖已计算的最低价格值" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "最低价格货币" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "最高价格" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "覆盖已计算的最高价格值" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "最高价格货币" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "更新" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "更新这个零件的价格" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "无法将所提供的货币转换为 {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "最低价格不能高于最高价格。" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "最高价格不能低于最低价格" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "数量必须大于或等于零" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "选择父装配" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "选择零部件" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "选择要复制物料清单的零件" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "移除现有数据" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "复制前删除现有的物料清单项目" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "包含继承的" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "包含从模板零件继承的物料清单项目" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "跳过无效行" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "启用此选项以跳过无效行" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "复制替代品零件" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "复制物料清单项目时复制替代品零件" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "低库存通知" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "可用的 {part.name}库存已经跌到设置的最低值" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "到期库存通知" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "您有1个库存项即将到期" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "您有{item_count}个库存项即将到期" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "永久有效" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "已过期 {abs(days_diff)} 天" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "今天到期" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry}天" @@ -7582,64 +7622,77 @@ msgstr "为扫描 TME 条形码提供支持" msgid "The Supplier which acts as 'TME'" msgstr "作为‘TME’的供应商" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "只有员工用户可以管理插件" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "插件安装已禁用" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "插件安装成功" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "插件安装到 {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "在插件仓库中找不到插件" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "插件不是一个打包的插件" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "找不到插件包名称" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "只有员工用户可以管理插件" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "插件卸载已禁用" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "插件无法卸载,因为它目前处于激活状态" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "该插件为系统必需组件,无法卸载" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "该插件为示例插件,无法卸载" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "该插件为系统内置组件,无法卸载" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "插件未安装" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "未找到插件安装记录" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "插件卸载成功" @@ -7691,21 +7744,21 @@ msgstr "软件包插件" msgid "Plugin" msgstr "插件" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "未找到作者" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "插件 '{p}' 与当前 InvenTree 版本{v} 不兼容" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "插件所需最低版本 {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "插件所需最高版本 {v}" @@ -7886,51 +7939,51 @@ msgstr "安装尚未确认" msgid "Either packagename or URL must be provided" msgstr "必须提供软件包名称或者URL" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "完全重载" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "执行插件库的完整重载" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "强制重载" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "强制重载插件库,即使已经加载" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "收集插件" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "收集插件并添加到注册表中" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "激活插件" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "激活此插件" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "强制插件不可停用" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "删除配置" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "从数据库中删除插件配置" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "该设置项适用的目标用户" @@ -8192,7 +8245,7 @@ msgstr "总计" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "序列号" @@ -8217,7 +8270,7 @@ msgstr "库存项测试报告" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "已安装的项目" @@ -8250,186 +8303,198 @@ msgstr "无结果 (必填)" msgid "No result" msgstr "没有结果" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "资产文件不存在" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "无效的媒体文件路径" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "无效的静态文件路径" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "未找到资源文件" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "找不到图片文件" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "未指定图片文件" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "parpart_image 标签需要一个零件实例" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "公司_图片标签需要一个公司实例" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "按位置深度筛选" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "按顶级位置筛选" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "在筛选结果中包含子地点" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "上级地点" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "按上级位置筛选" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "零件名称 (不区分大小写)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "零件名称包含 (不区分大小写)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "零件名称 (正则表达式)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "内部零件号 (不区分大小写)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "内部零件号 (不区分大小写)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "内部零件号 (正则表达式)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "最低库存" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "最大库存" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "状态代码" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "外部地点" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "被生产订单消耗" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "安装于其他库存项中" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "零件树" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "更新时间早于" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "更新时间晚于" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "盘点时间早于" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "盘点时间晚于" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "过期日期前" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "过期日期后" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "过期" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "提供库存项的主键(PK)以排除该项及其所有子项" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "级联位置" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "若为真,则包含给定位置的所有子位置中的项目" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "按数字位置ID或字母“null”筛选" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "请先输入数量" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "必须提供有效的零件" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "给定的供应商零件不存在" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "供应商零件有定义的包装大小,但 use_pack_size 标志未设置" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "不能为不可跟踪的零件提供序列号" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "包含已安装项" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "如果为真,则包含给定库存项下已安装组件的测试结果" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "按数字库存项ID进行筛选" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "ID 为 {id} 的库存项不存在" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" -msgstr "" +msgstr "包含零件变体" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" -msgstr "" +msgstr "日期晚于" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" -msgstr "" +msgstr "日期早于" #: stock/models.py:73 msgid "Stock Location type" @@ -8443,7 +8508,7 @@ msgstr "库存地点类型" msgid "Default icon for all locations that have no icon set (optional)" msgstr "为所有没有图标的位置设置默认图标(可选)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "库存地点" @@ -8451,11 +8516,11 @@ msgstr "库存地点" msgid "Stock Locations" msgstr "库存地点" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "所有者" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "选择所有者" @@ -8483,274 +8548,274 @@ msgstr "该位置的库存地点类型" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "您不能将此库存地点设置为结构性,因为某些库存项已经位于它!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field} 不存在" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "必须指定零件" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "库存项不能存放在结构性库存地点!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "无法为虚拟零件创建库存项" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "零件类型 ('{self.supplier_part.part}') 必须为 {self.part}" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "有序列号的项目的数量必须是1" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "如果数量大于1,则不能设置序列号" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "项目不能属于其自身" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "如果is_building=True,则项必须具有构建引用" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "构建引用未指向同一零件对象" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "父级库存项" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "基础零件" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "为此库存项目选择匹配的供应商零件" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "这个库存物品在哪里?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "包装此库存物品存储在" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "安装于" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "此项目是否安装在另一个项目中?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "此项目的序列号" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "此库存项的批号" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "库存数量" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "源代码构建" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "为此库存项目构建" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "消费者" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "构建消耗此库存项的生产订单" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "采购订单来源" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "此库存商品的采购订单" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "目的地销售订单" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "库存物品的到期日。在此日期之后,库存将被视为过期" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "耗尽时删除" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "当库存耗尽时删除此库存项" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "购买时一个单位的价格" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "转换为零件" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "数量超过可用库存" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "零件未设置为可跟踪" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "数量必须是整数" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "数量不得超过现有库存量 ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "必须以列表形式提供序列号" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "数量不匹配序列号" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "无法将库存分配到结构位置" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "测试模板不存在" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "库存项已分配到销售订单" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "库存项已安装在另一个项目中" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "库存项包含其他项目" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "库存项已分配给客户" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "库存项目前正在生产" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "序列化的库存不能合并" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "复制库存项" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "库存项必须指相同零件" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "库存项必须是同一供应商的零件" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "库存状态码必须匹配" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "库存项不能移动,因为它没有库存" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "库存项跟踪" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "条目注释" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "库存项测试结果" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "必须为此测试提供值" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "测试附件必须上传" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "此测试的值无效" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "测试结果" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "测试输出值" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "测验结果附件" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "测试备注" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "测试站" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "进行测试的测试站的标识符" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "已开始" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "测试开始的时间戳" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "已完成" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "测试结束的时间戳" @@ -8794,246 +8859,246 @@ msgstr "选择要生成序列号的零件" msgid "Quantity of serial numbers to generate" msgstr "要生成的序列号的数量" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "此结果的测试模板" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" msgstr "未找到适用于此零件的匹配测试" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "必须提供模板 ID 或测试名称" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "测试完成时间不能早于测试开始时间" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "父项" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "父库存项" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "添加时使用包装尺寸:定义的数量是包装的数量" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "包装规格" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "输入新项目的序列号" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "供应商零件编号" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "已过期" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "子项目" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "跟踪项目" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "此库存商品的购买价格,单位或包装" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "输入要序列化的库存项目数量" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "未提供库存项" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "数量不得超过现有库存量 ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "目标库存位置" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "此零件不能分配序列号" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "序列号已存在" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "选择要安装的库存项目" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "安装数量" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "输入要安装的项目数量" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "添加交易记录 (可选)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "安装数量必须至少为1" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "库存项不可用" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "所选零件不在物料清单中" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "安装数量不得超过可用数量" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "已卸载项目的目标位置" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "选择要将库存项目转换为的零件" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "所选零件不是有效的转换选项" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "无法转换已分配供应商零件的库存项" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "库存项状态代码" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "选择要更改状态的库存项目" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "未选择库存商品" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "子位置" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "上级库存地点" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "零件必须可销售" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "物料已分配到销售订单" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "项目被分配到生产订单中" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "客户分配库存项目" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "所选公司不是客户" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "库存分配说明" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "必须提供库存物品清单" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "库存合并说明" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "允许不匹配的供应商" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "允许合并具有不同供应商零件的库存项目" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "允许不匹配的状态" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "允许合并具有不同状态代码的库存项目" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "必须提供至少两件库存物品" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "无更改" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "库存项主键值" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "库存项无现货" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "库存项已有现货" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "数量不得为负" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "库存交易记录" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "合并至现有库存" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "若可行,将退回项目合并至现有库存项" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "下一个序列号" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "上一个序列号" @@ -9539,59 +9604,75 @@ msgstr "用户的姓氏" msgid "Email address of the user" msgstr "用户的电子邮件地址" -#: users/serializers.py:309 -msgid "Staff" -msgstr "职员" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "此用户是否拥有员工权限" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "管理员" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "该用户是否拥有管理员权限" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "超级用户" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "此用户是否为超级用户" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "此用户帐户是否已激活" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "只有超级用户可以调整此字段" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "密码" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "用户密码" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "覆盖警告" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "覆盖有关密码规则的警告" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "你没有权限创建用户" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "您的账户已创建。" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "请使用密码重置功能登录" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "欢迎使用 InvenTree" diff --git a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po index 519c825616..f3a72b5ac3 100644 --- a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-22 11:06+0000\n" -"PO-Revision-Date: 2026-02-22 11:09\n" +"POT-Creation-Date: 2026-04-08 09:17+0000\n" +"PO-Revision-Date: 2026-04-08 09:20\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -21,43 +21,35 @@ msgstr "" msgid "API endpoint not found" msgstr "未找到 API 端點" -#: InvenTree/api.py:442 -msgid "List of items or filters must be provided for bulk operation" -msgstr "批次操作必須提供項目列表或篩選條件" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:449 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "項目必須以列表形式提供" -#: InvenTree/api.py:457 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "提供了無效的單位" -#: InvenTree/api.py:463 -msgid "Filters must be provided as a dict" -msgstr "篩選條件必須以字典 (dict) 格式提供" - -#: InvenTree/api.py:470 -msgid "Invalid filters provided" -msgstr "提供了無效的過濾器" - -#: InvenTree/api.py:475 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "all 篩選器只能在值為 true 時使用" -#: InvenTree/api.py:480 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "沒有項目符合所提供的條件" -#: InvenTree/api.py:504 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "未提供資料" -#: InvenTree/api.py:520 +#: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "此欄位須唯一值。" -#: InvenTree/api.py:815 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "用户沒有權限查閲當前模型。" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "不能將 {original} 轉換到 {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:596 order/models.py:723 order/models.py:1018 +#: InvenTree/helpers.py:613 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "提供的數量無效" @@ -112,13 +104,13 @@ msgstr "輸入日期" msgid "Invalid decimal value" msgstr "無效的十進位數值" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:499 -#: build/serializers.py:570 build/serializers.py:1788 company/models.py:822 -#: order/models.py:1783 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1815 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2952 stock/models.py:3076 stock/serializers.py:721 -#: stock/serializers.py:897 stock/serializers.py:1039 stock/serializers.py:1367 -#: stock/serializers.py:1456 stock/serializers.py:1655 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:732 +#: stock/serializers.py:908 stock/serializers.py:1050 stock/serializers.py:1378 +#: stock/serializers.py:1467 stock/serializers.py:1666 msgid "Notes" msgstr "備註" @@ -131,75 +123,91 @@ msgstr "值' {name}' 未出現在模式格式中" msgid "Provided value does not match required pattern: " msgstr "提供的值與所需模式不匹配:" -#: InvenTree/helpers.py:600 +#: InvenTree/helpers.py:617 msgid "Cannot serialize more than 1000 items at once" msgstr "一次不能序列化超過 1000 個項目" -#: InvenTree/helpers.py:606 +#: InvenTree/helpers.py:623 msgid "Empty serial number string" msgstr "序號為空白" -#: InvenTree/helpers.py:635 +#: InvenTree/helpers.py:652 msgid "Duplicate serial" msgstr "複製序列號" -#: InvenTree/helpers.py:667 InvenTree/helpers.py:710 InvenTree/helpers.py:728 -#: InvenTree/helpers.py:735 InvenTree/helpers.py:754 +#: InvenTree/helpers.py:684 InvenTree/helpers.py:727 InvenTree/helpers.py:745 +#: InvenTree/helpers.py:752 InvenTree/helpers.py:771 #, python-brace-format msgid "Invalid group: {group}" msgstr "無效的群組:{group}" -#: InvenTree/helpers.py:698 +#: InvenTree/helpers.py:715 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "組範圍 {group} 超出了允許的數量 ({expected_quantity})" -#: InvenTree/helpers.py:764 +#: InvenTree/helpers.py:781 msgid "No serial numbers found" msgstr "未找到序列號" -#: InvenTree/helpers.py:771 +#: InvenTree/helpers.py:788 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "唯一序列號數量 ({n}) 必須與數量 ({q}) 相符" -#: InvenTree/helpers.py:901 +#: InvenTree/helpers.py:918 msgid "Remove HTML tags from this value" msgstr "從這個值中刪除 HTML 標籤" -#: InvenTree/helpers.py:980 +#: InvenTree/helpers.py:995 msgid "Data contains prohibited markdown content" msgstr "資料包含被禁止的 Markdown 內容" -#: InvenTree/helpers_model.py:139 +#: InvenTree/helpers_model.py:109 +msgid "Invalid URL: no hostname" +msgstr "" + +#: InvenTree/helpers_model.py:114 +msgid "Invalid URL: hostname could not be resolved" +msgstr "" + +#: InvenTree/helpers_model.py:120 +msgid "URL points to a private or reserved IP address" +msgstr "" + +#: InvenTree/helpers_model.py:195 +msgid "Too many redirects" +msgstr "" + +#: InvenTree/helpers_model.py:200 msgid "Connection error" msgstr "連接錯誤" -#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 +#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 msgid "Server responded with invalid status code" msgstr "服務器響應狀態碼無效" -#: InvenTree/helpers_model.py:147 +#: InvenTree/helpers_model.py:210 msgid "Exception occurred" msgstr "發生異常" -#: InvenTree/helpers_model.py:157 +#: InvenTree/helpers_model.py:220 msgid "Server responded with invalid Content-Length value" msgstr "服務器響應的內容長度值無效" -#: InvenTree/helpers_model.py:160 +#: InvenTree/helpers_model.py:223 msgid "Image size is too large" msgstr "圖片尺寸過大" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:235 msgid "Image download exceeded maximum size" msgstr "圖片下載超出最大尺寸" -#: InvenTree/helpers_model.py:177 +#: InvenTree/helpers_model.py:240 msgid "Remote server returned empty response" msgstr "遠程服務器返回了空響應" -#: InvenTree/helpers_model.py:185 +#: InvenTree/helpers_model.py:248 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一個有效的圖片文件" @@ -207,11 +215,11 @@ msgstr "提供的 URL 不是一個有效的圖片文件" msgid "Log in to the app" msgstr "登入此應用程式" -#: InvenTree/magic_login.py:41 company/models.py:174 users/serializers.py:201 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "電子郵件" -#: InvenTree/middleware.py:178 +#: InvenTree/middleware.py:183 msgid "You must enable two-factor authentication before doing anything else." msgstr "在進行任何其他操作前,必須先啟用雙因素驗證。" @@ -259,18 +267,18 @@ msgstr "參考編號過大" msgid "Invalid choice" msgstr "無效的選項" -#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 -#: common/models.py:2119 common/models.py:2244 common/models.py:2513 -#: common/serializers.py:566 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 +#: common/models.py:2126 common/models.py:2251 common/models.py:2520 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 #: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "名稱" -#: InvenTree/models.py:1028 build/models.py:262 common/models.py:177 -#: common/models.py:2251 common/models.py:2364 common/models.py:2528 -#: company/models.py:553 company/models.py:813 order/models.py:445 -#: order/models.py:1828 part/models.py:1130 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 +#: common/models.py:2258 common/models.py:2371 common/models.py:2535 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1860 part/models.py:1124 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 @@ -281,7 +289,7 @@ msgstr "描述" msgid "Description (optional)" msgstr "描述(選填)" -#: InvenTree/models.py:1044 common/models.py:2834 +#: InvenTree/models.py:1044 common/models.py:2841 msgid "Path" msgstr "路徑" @@ -313,77 +321,68 @@ msgstr "條碼資料的唯一雜湊值" msgid "Existing barcode found" msgstr "發現現有條碼" -#: InvenTree/models.py:1435 -msgid "Task Failure" -msgstr "任務失敗" - -#: InvenTree/models.py:1436 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "背景工作任務「{f}」在嘗試 {n} 次後失敗" - -#: InvenTree/models.py:1463 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "伺服器錯誤" -#: InvenTree/models.py:1464 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "伺服器紀錄了一個錯誤。" -#: InvenTree/models.py:1506 common/models.py:1769 +#: InvenTree/models.py:1496 common/models.py:1776 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "圖像" -#: InvenTree/serializers.py:327 part/models.py:4173 +#: InvenTree/serializers.py:324 part/models.py:4168 msgid "Must be a valid number" msgstr "必須是有效的數字" -#: InvenTree/serializers.py:369 company/models.py:216 part/models.py:3312 +#: InvenTree/serializers.py:366 company/models.py:217 part/models.py:3307 msgid "Currency" msgstr "貨幣" -#: InvenTree/serializers.py:372 part/serializers.py:1337 +#: InvenTree/serializers.py:369 part/serializers.py:1355 msgid "Select currency from available options" msgstr "從可用選項中選擇貨幣" -#: InvenTree/serializers.py:726 +#: InvenTree/serializers.py:719 msgid "This field may not be null." -msgstr "" +msgstr "此欄位不可為空白。" -#: InvenTree/serializers.py:732 +#: InvenTree/serializers.py:725 msgid "Invalid value" msgstr "無效值" -#: InvenTree/serializers.py:769 +#: InvenTree/serializers.py:762 msgid "Remote Image" msgstr "遠程圖片" -#: InvenTree/serializers.py:770 +#: InvenTree/serializers.py:763 msgid "URL of remote image file" msgstr "遠程圖片文件的 URL" -#: InvenTree/serializers.py:788 +#: InvenTree/serializers.py:781 msgid "Downloading images from remote URL is not enabled" msgstr "未啓用從遠程 URL下載圖片" -#: InvenTree/serializers.py:795 +#: InvenTree/serializers.py:788 msgid "Failed to download image from remote URL" msgstr "從遠程URL下載圖像失敗" -#: InvenTree/serializers.py:878 +#: InvenTree/serializers.py:871 msgid "Invalid content type format" -msgstr "" +msgstr "不合規的內容類型格式" -#: InvenTree/serializers.py:881 +#: InvenTree/serializers.py:874 msgid "Content type not found" -msgstr "" +msgstr "內容類型未發現" -#: InvenTree/serializers.py:887 +#: InvenTree/serializers.py:880 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "內容類型與所需的 mixin 類別不符" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -537,11 +536,11 @@ msgstr "中文 (簡體)" msgid "Chinese (Traditional)" msgstr "中文 (繁體)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:678 msgid "Update Available" msgstr "有可用更新" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:679 msgid "An update for InvenTree is available" msgstr "有新的 InvenTree 更新可用" @@ -553,30 +552,30 @@ msgstr "無效的物理單位" msgid "Not a valid currency code" msgstr "無效的貨幣代碼" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1372 -#: order/serializers.py:122 +#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 +#: order/serializers.py:123 msgid "Order Status" msgstr "訂單狀態" -#: build/api.py:80 build/models.py:274 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "上層生產工單" -#: build/api.py:84 build/api.py:832 order/api.py:551 order/api.py:774 -#: order/api.py:1173 order/api.py:1448 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:558 order/api.py:783 +#: order/api.py:1185 order/api.py:1486 stock/api.py:572 msgid "Include Variants" msgstr "包含變體" -#: build/api.py:100 build/api.py:460 build/api.py:846 build/models.py:280 -#: build/serializers.py:1228 build/serializers.py:1399 -#: build/serializers.py:1485 company/models.py:1032 company/serializers.py:435 -#: order/api.py:303 order/api.py:307 order/api.py:930 order/api.py:1186 -#: order/api.py:1189 order/models.py:1944 order/models.py:2110 -#: order/models.py:2111 part/api.py:1160 part/api.py:1163 part/api.py:1376 -#: part/models.py:527 part/models.py:3323 part/models.py:3466 -#: part/models.py:3524 part/models.py:3545 part/models.py:3567 -#: part/models.py:3708 part/models.py:3970 part/models.py:4389 -#: part/serializers.py:1286 part/serializers.py:1896 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 +#: order/api.py:1201 order/models.py:1978 order/models.py:2146 +#: order/models.py:2147 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3318 part/models.py:3461 +#: part/models.py:3519 part/models.py:3540 part/models.py:3562 +#: part/models.py:3703 part/models.py:3965 part/models.py:4384 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +584,9 @@ msgstr "包含變體" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/api.py:1521 stock/serializers.py:120 -#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:591 -#: stock/serializers.py:930 templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:419 stock/serializers.py:602 +#: stock/serializers.py:941 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,151 +595,155 @@ msgstr "包含變體" msgid "Part" msgstr "零件" -#: build/api.py:120 build/api.py:123 build/serializers.py:1498 part/api.py:975 -#: part/api.py:1387 part/models.py:412 part/models.py:1148 part/models.py:3595 -#: part/serializers.py:1296 part/serializers.py:1712 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1142 part/models.py:3590 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "類別" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "可測試部分" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:132 msgid "Assigned to me" msgstr "分配給我" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "負責人" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "建立於之前" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "建立於之後" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "有開始日期" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "開始日期早於" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "開始日期晚於" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "有目標日期" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "目標日期早於" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "目標日期晚於" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "完成於之前" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "完成於之後" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:237 msgid "Min Date" msgstr "最小日期" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:256 msgid "Max Date" msgstr "最大日期" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "排除樹" -#: build/api.py:399 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "工單必須被取消才能被刪除" -#: build/api.py:443 build/serializers.py:1429 part/models.py:4004 +#: build/api.py:444 build/serializers.py:1406 part/models.py:3999 msgid "Consumable" msgstr "耗材" -#: build/api.py:446 build/serializers.py:1432 part/models.py:3998 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3993 msgid "Optional" msgstr "非必須項目" -#: build/api.py:449 build/serializers.py:1472 common/setting/system.py:470 -#: part/models.py:1253 part/serializers.py:1666 part/serializers.py:1685 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:471 +#: part/models.py:1247 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "裝配" -#: build/api.py:452 +#: build/api.py:453 msgid "Tracked" msgstr "追蹤中" -#: build/api.py:455 build/serializers.py:1435 part/models.py:1271 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1265 msgid "Testable" msgstr "可測試" -#: build/api.py:465 order/api.py:994 order/api.py:1362 +#: build/api.py:466 order/api.py:1004 order/api.py:1374 msgid "Order Outstanding" msgstr "訂單未完成" -#: build/api.py:475 build/serializers.py:1525 order/api.py:953 +#: build/api.py:476 build/serializers.py:1502 order/api.py:963 msgid "Allocated" msgstr "已分配" -#: build/api.py:484 build/models.py:1782 build/serializers.py:1448 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "已消耗" -#: build/api.py:493 company/models.py:877 company/serializers.py:414 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "可用數量" -#: build/api.py:517 build/serializers.py:1527 company/serializers.py:411 -#: order/serializers.py:1270 part/serializers.py:831 part/serializers.py:1152 -#: part/serializers.py:1721 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1284 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "已訂購" -#: build/api.py:869 build/models.py:120 order/models.py:1977 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:2011 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "生產工單" -#: build/api.py:883 build/api.py:887 build/serializers.py:362 -#: build/serializers.py:487 build/serializers.py:557 build/serializers.py:1276 -#: build/serializers.py:1281 order/api.py:1233 order/api.py:1238 -#: order/serializers.py:791 order/serializers.py:931 order/serializers.py:2039 -#: part/serializers.py:1306 stock/api.py:987 stock/serializers.py:111 -#: stock/serializers.py:598 stock/serializers.py:714 stock/serializers.py:892 -#: stock/serializers.py:1449 stock/serializers.py:1770 -#: stock/serializers.py:1819 templates/email/stale_stock_notification.html:18 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1245 order/api.py:1250 +#: order/serializers.py:804 order/serializers.py:944 order/serializers.py:2031 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:609 stock/serializers.py:725 stock/serializers.py:903 +#: stock/serializers.py:1460 stock/serializers.py:1781 +#: stock/serializers.py:1830 templates/email/stale_stock_notification.html:18 #: users/models.py:549 msgid "Location" msgstr "地點" -#: build/api.py:895 part/serializers.py:1331 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" -msgstr "" +msgstr "產出" -#: build/api.py:897 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" @@ -748,41 +751,41 @@ msgstr "" msgid "Build Orders" msgstr "生產工單" -#: build/models.py:178 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "裝配物料清單尚未驗證" -#: build/models.py:185 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "無法為未激活的零件創建生產訂單" -#: build/models.py:192 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "無法為已解鎖的零件創建生產訂單" -#: build/models.py:210 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "只有可採購的零件,生產工單才可進行外部履行" -#: build/models.py:217 order/models.py:371 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "必須指定負責的用户或組" -#: build/models.py:222 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "無法更改生產工單" -#: build/models.py:227 order/models.py:384 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "目標日期必須晚於開始日期" -#: build/models.py:255 +#: build/models.py:258 msgid "Build Order Reference" msgstr "生產工單代號" -#: build/models.py:256 build/serializers.py:1426 order/models.py:617 -#: order/models.py:1314 order/models.py:1776 order/models.py:2714 -#: part/models.py:4044 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1337 order/models.py:1808 order/models.py:2744 +#: part/models.py:4039 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,234 +793,234 @@ msgstr "生產工單代號" msgid "Reference" msgstr "參考代號" -#: build/models.py:265 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "關於生產工單的簡單説明(選填)" -#: build/models.py:275 +#: build/models.py:278 msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:284 +#: build/models.py:287 msgid "Select part to build" msgstr "選擇要生產的零件" -#: build/models.py:289 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "銷售訂單代號" -#: build/models.py:294 +#: build/models.py:297 msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:299 build/serializers.py:1087 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "來源倉儲地點" -#: build/models.py:305 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "選擇領取料件的倉儲地點(留白表示可以從任何地點領取)" -#: build/models.py:311 +#: build/models.py:314 msgid "External Build" msgstr "外部生產" -#: build/models.py:312 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "此生產工單由外部履行" -#: build/models.py:317 +#: build/models.py:320 msgid "Destination Location" msgstr "目標倉儲地點" -#: build/models.py:322 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "選擇已完成項目庫存地點" -#: build/models.py:326 +#: build/models.py:329 msgid "Build Quantity" msgstr "生產數量" -#: build/models.py:329 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "要生產的項目數量" -#: build/models.py:333 +#: build/models.py:336 msgid "Completed items" msgstr "已完成項目" -#: build/models.py:335 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "已經完成的庫存品數量" -#: build/models.py:339 +#: build/models.py:342 msgid "Build Status" msgstr "生產狀態" -#: build/models.py:344 +#: build/models.py:347 msgid "Build status code" msgstr "生產狀態代碼" -#: build/models.py:353 build/serializers.py:349 order/serializers.py:807 -#: stock/models.py:1105 stock/serializers.py:85 stock/serializers.py:1622 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:820 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1633 msgid "Batch Code" msgstr "批號" -#: build/models.py:357 build/serializers.py:350 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "此產出的批號" -#: build/models.py:361 order/models.py:482 order/serializers.py:165 -#: part/models.py:1334 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1328 msgid "Creation Date" msgstr "建立日期" -#: build/models.py:367 +#: build/models.py:370 msgid "Build start date" msgstr "生產開始日期" -#: build/models.py:368 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "預計此生產工單的開始日期" -#: build/models.py:374 +#: build/models.py:377 msgid "Target completion date" msgstr "目標完成日期" -#: build/models.py:376 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "生產的預計完成日期。若超過此日期則工單會逾期。" -#: build/models.py:381 order/models.py:670 order/models.py:2753 +#: build/models.py:384 order/models.py:681 order/models.py:2783 msgid "Completion Date" msgstr "完成日期" -#: build/models.py:389 +#: build/models.py:392 msgid "completed by" msgstr "完成者" -#: build/models.py:398 +#: build/models.py:401 msgid "Issued by" msgstr "發布者" -#: build/models.py:399 +#: build/models.py:402 msgid "User who issued this build order" msgstr "發布此生產工單的使用者" -#: build/models.py:408 common/models.py:186 order/api.py:184 -#: order/models.py:507 part/models.py:1351 +#: build/models.py:411 common/models.py:187 order/api.py:182 +#: order/models.py:516 part/models.py:1345 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "負責人" -#: build/models.py:409 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "負責此生產工單的使用者或羣組" -#: build/models.py:414 stock/models.py:1098 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "外部連結" -#: build/models.py:416 common/models.py:2007 part/models.py:1182 -#: stock/models.py:1100 +#: build/models.py:419 common/models.py:2014 part/models.py:1176 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "外部URL連結" -#: build/models.py:421 +#: build/models.py:424 msgid "Build Priority" msgstr "製造優先度" -#: build/models.py:424 +#: build/models.py:427 msgid "Priority of this build order" msgstr "此生產工單的優先程度" -#: build/models.py:432 common/models.py:156 common/models.py:170 -#: order/api.py:170 order/models.py:454 order/models.py:1808 +#: build/models.py:435 common/models.py:157 common/models.py:171 +#: order/api.py:168 order/models.py:456 order/models.py:1840 msgid "Project Code" msgstr "專案代碼" -#: build/models.py:433 +#: build/models.py:436 msgid "Project code for this build order" msgstr "此生產工單隸屬的專案代碼" -#: build/models.py:686 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "無法完成仍有未結束子工單的生產工單" -#: build/models.py:691 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "無法完成有未完成產出的生產工單" -#: build/models.py:710 build/models.py:840 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "未能卸載任務以完成生產分配" -#: build/models.py:733 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "生產工單 {build} 已經完成" -#: build/models.py:739 +#: build/models.py:742 msgid "A build order has been completed" msgstr "一張生產工單已經完成" -#: build/models.py:921 build/serializers.py:397 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "對於可跟蹤的零件,必須提供序列號" -#: build/models.py:1013 build/models.py:1100 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "未指定產出" -#: build/models.py:1016 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "產出已完成" -#: build/models.py:1019 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "產出與生產訂單不匹配" -#: build/models.py:1107 build/models.py:1213 build/serializers.py:275 -#: build/serializers.py:325 build/serializers.py:955 build/serializers.py:1739 -#: order/models.py:720 order/serializers.py:602 order/serializers.py:802 -#: part/serializers.py:1660 stock/models.py:945 stock/models.py:1435 -#: stock/models.py:1900 stock/serializers.py:692 stock/serializers.py:1611 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:615 order/serializers.py:815 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:703 stock/serializers.py:1622 msgid "Quantity must be greater than zero" msgstr "數量必須大於零" -#: build/models.py:1111 build/models.py:1218 build/serializers.py:280 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "數量不能大於輸出數量" -#: build/models.py:1186 build/serializers.py:596 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "此產出尚未通過所有必要測試" -#: build/models.py:1189 build/serializers.py:591 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "產出 {serial} 未通過所有必要測試" -#: build/models.py:1200 +#: build/models.py:1203 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1208 +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1737 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "生產訂單行項目" -#: build/models.py:1761 +#: build/models.py:1765 msgid "Build object" msgstr "生產對象" -#: build/models.py:1773 build/models.py:2098 build/serializers.py:261 -#: build/serializers.py:310 build/serializers.py:1447 common/models.py:1361 -#: order/models.py:1759 order/models.py:2599 order/serializers.py:1692 -#: order/serializers.py:2128 part/models.py:3480 part/models.py:3992 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1368 +#: order/models.py:1782 order/models.py:2627 order/serializers.py:1683 +#: order/serializers.py:2120 part/models.py:3475 part/models.py:3987 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1029,449 +1032,445 @@ msgstr "生產對象" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:680 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:691 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "數量" -#: build/models.py:1774 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "生產工單所需數量" -#: build/models.py:1783 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "已消耗庫存數量" -#: build/models.py:1884 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生產項必須指定產出,因為主零件已經被標記為可追蹤的" -#: build/models.py:1947 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" msgstr "選擇的庫存品項和BOM的項目不符" -#: build/models.py:1966 +#: build/models.py:1970 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1972 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "有序號的品項數量必須為1" -#: build/models.py:1982 +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配的數量({q})不能超過可用的庫存數量({a})" -#: build/models.py:1999 order/models.py:2548 +#: build/models.py:2003 order/models.py:2576 msgid "Stock item is over-allocated" msgstr "庫存品項超額分配" -#: build/models.py:2088 build/serializers.py:938 build/serializers.py:1244 -#: order/serializers.py:1529 order/serializers.py:1550 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1520 order/serializers.py:1541 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1409 stock/models.py:445 stock/serializers.py:102 -#: stock/serializers.py:804 stock/serializers.py:1305 stock/serializers.py:1417 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:815 stock/serializers.py:1316 stock/serializers.py:1428 msgid "Stock Item" msgstr "庫存品項" -#: build/models.py:2089 +#: build/models.py:2093 msgid "Source stock item" msgstr "來源庫存項目" -#: build/models.py:2099 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "要分配的庫存數量" -#: build/models.py:2108 +#: build/models.py:2112 msgid "Install into" msgstr "安裝到" -#: build/models.py:2109 +#: build/models.py:2113 msgid "Destination stock item" msgstr "目的庫存品項" -#: build/serializers.py:118 +#: build/serializers.py:115 msgid "Build Level" msgstr "構建等級" -#: build/serializers.py:131 part/serializers.py:1238 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "零件名稱" -#: build/serializers.py:209 build/serializers.py:964 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "產出" -#: build/serializers.py:221 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "產出與之前的生產不匹配" -#: build/serializers.py:225 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "產出零件與生產訂單零件不匹配" -#: build/serializers.py:229 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "此產出已經完成" -#: build/serializers.py:243 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "此產出尚未完全分配" -#: build/serializers.py:262 build/serializers.py:311 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "輸入產出數量" -#: build/serializers.py:333 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "可追蹤的零件數量必須為整數" -#: build/serializers.py:339 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因為BOM包含可追蹤的零件,所以數量必須為整數" -#: build/serializers.py:356 order/serializers.py:823 order/serializers.py:1696 -#: stock/serializers.py:703 +#: build/serializers.py:354 order/serializers.py:836 order/serializers.py:1687 +#: stock/serializers.py:714 msgid "Serial Numbers" msgstr "序號" -#: build/serializers.py:357 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "輸出產出的序列號" -#: build/serializers.py:363 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "生產輸出的庫存地點" -#: build/serializers.py:378 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "自動分配序號" -#: build/serializers.py:380 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "自動為需要項目分配對應的序號" -#: build/serializers.py:413 order/serializers.py:909 stock/api.py:1183 -#: stock/models.py:1923 +#: build/serializers.py:411 order/serializers.py:922 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "序號已存在或無效" -#: build/serializers.py:455 build/serializers.py:511 build/serializers.py:603 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "必須提供產出清單" -#: build/serializers.py:488 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "廢品產出的庫存位置" -#: build/serializers.py:494 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "放棄分配" -#: build/serializers.py:495 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消對廢品產出的任何庫存分配" -#: build/serializers.py:500 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "廢品產出的原因" -#: build/serializers.py:558 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "已完成刪除的庫存地點" -#: build/serializers.py:566 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:567 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果庫存尚未全部分配,則完成產出" -#: build/serializers.py:692 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "消費已分配的庫存" -#: build/serializers.py:693 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "消耗已分配給此生產的任何庫存" -#: build/serializers.py:699 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "移除未完成的產出" -#: build/serializers.py:700 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "刪除所有未完成的產出" -#: build/serializers.py:727 +#: build/serializers.py:725 msgid "Not permitted" msgstr "不允許" -#: build/serializers.py:728 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "接受作為此生產訂單的消費" -#: build/serializers.py:729 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "完成此生產訂單前取消分配" -#: build/serializers.py:756 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "超出分配的庫存" -#: build/serializers.py:759 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何處理分配給生產訂單的額外庫存項" -#: build/serializers.py:770 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "有庫存項目已被過度分配" -#: build/serializers.py:775 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:777 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受庫存項未被完全分配至生產訂單" -#: build/serializers.py:788 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "所需庫存尚未完全分配" -#: build/serializers.py:793 order/serializers.py:478 order/serializers.py:1597 +#: build/serializers.py:791 order/serializers.py:491 order/serializers.py:1588 msgid "Accept Incomplete" msgstr "接受不完整" -#: build/serializers.py:795 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "允許所需數量的產出未完成" -#: build/serializers.py:806 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "未完成所需生產數量" -#: build/serializers.py:818 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "生產訂單有打開的子生產訂單" -#: build/serializers.py:821 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "生產訂單必須處於生產狀態" -#: build/serializers.py:824 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "生產訂單有未完成的產出" -#: build/serializers.py:863 +#: build/serializers.py:861 msgid "Build Line" msgstr "生產行" -#: build/serializers.py:871 +#: build/serializers.py:869 msgid "Build output" msgstr "產出" -#: build/serializers.py:879 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "生產產出必須指向相同的生產" -#: build/serializers.py:910 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "生產行項目" -#: build/serializers.py:928 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必須與生產訂單零件相同" -#: build/serializers.py:944 stock/serializers.py:1318 +#: build/serializers.py:942 stock/serializers.py:1329 msgid "Item must be in stock" msgstr "商品必須有庫存" -#: build/serializers.py:987 order/serializers.py:1583 +#: build/serializers.py:985 order/serializers.py:1574 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:993 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "對於被追蹤的零件的分配,必須指定生產產出" -#: build/serializers.py:1001 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "對於未被追蹤的零件,無法指定生產產出" -#: build/serializers.py:1025 order/serializers.py:1856 +#: build/serializers.py:1023 order/serializers.py:1847 msgid "Allocation items must be provided" msgstr "必須提供分配項目" -#: build/serializers.py:1089 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件來源的庫存地點(留空則可來源於任何庫存地點)" -#: build/serializers.py:1098 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1099 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "從該選定的庫存地點排除庫存項" -#: build/serializers.py:1104 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "可互換庫存" -#: build/serializers.py:1105 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多個位置的庫存項目可以互換使用" -#: build/serializers.py:1110 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "替代品庫存" -#: build/serializers.py:1111 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "允許分配可替換的零件" -#: build/serializers.py:1116 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "可選項目" -#: build/serializers.py:1117 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "分配可選的物料清單給生產訂單" -#: build/serializers.py:1123 +#: build/serializers.py:1121 msgid "All Items" -msgstr "" +msgstr "全部品項" -#: build/serializers.py:1124 +#: build/serializers.py:1122 msgid "Untracked Items" msgstr "" -#: build/serializers.py:1125 +#: build/serializers.py:1123 msgid "Tracked Items" msgstr "" -#: build/serializers.py:1127 +#: build/serializers.py:1125 msgid "Item Type" -msgstr "" +msgstr "品項類型" -#: build/serializers.py:1128 +#: build/serializers.py:1126 msgid "Select item type to auto-allocate" msgstr "" -#: build/serializers.py:1150 -msgid "Failed to start auto-allocation task" -msgstr "啓動自動分配任務失敗" - -#: build/serializers.py:1203 +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "物料清單參考" -#: build/serializers.py:1209 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "物料清單零件識別號碼" -#: build/serializers.py:1216 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "物料清單零件名稱" -#: build/serializers.py:1265 +#: build/serializers.py:1242 msgid "Install Into" -msgstr "" +msgstr "安裝至" -#: build/serializers.py:1292 build/serializers.py:1510 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "生產" -#: build/serializers.py:1311 company/models.py:633 order/api.py:316 -#: order/api.py:321 order/api.py:547 order/serializers.py:594 -#: stock/models.py:1041 stock/serializers.py:571 +#: build/serializers.py:1288 company/models.py:638 order/api.py:322 +#: order/api.py:327 order/api.py:554 order/serializers.py:607 +#: stock/models.py:1043 stock/serializers.py:582 msgid "Supplier Part" msgstr "供應商零件" -#: build/serializers.py:1327 stock/serializers.py:624 +#: build/serializers.py:1304 stock/serializers.py:635 msgid "Allocated Quantity" msgstr "已分配數量" -#: build/serializers.py:1394 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "構建參考" -#: build/serializers.py:1404 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "零件類別名稱" -#: build/serializers.py:1438 common/setting/system.py:494 part/models.py:1265 +#: build/serializers.py:1415 common/setting/system.py:495 part/models.py:1259 msgid "Trackable" msgstr "可追蹤" -#: build/serializers.py:1441 +#: build/serializers.py:1418 msgid "Inherited" msgstr "已繼承的" -#: build/serializers.py:1444 part/models.py:4077 +#: build/serializers.py:1421 part/models.py:4072 msgid "Allow Variants" msgstr "允許變體" -#: build/serializers.py:1450 build/serializers.py:1455 part/models.py:3798 -#: part/models.py:4381 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3793 +#: part/models.py:4376 stock/api.py:881 msgid "BOM Item" msgstr "物料清單項" -#: build/serializers.py:1528 order/serializers.py:1271 part/serializers.py:1156 -#: part/serializers.py:1725 +#: build/serializers.py:1505 order/serializers.py:1285 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "生產中" -#: build/serializers.py:1530 part/serializers.py:822 part/serializers.py:1160 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "排程生產中" -#: build/serializers.py:1533 part/serializers.py:855 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "外部庫存" -#: build/serializers.py:1534 part/serializers.py:1146 part/serializers.py:1768 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "可用庫存" -#: build/serializers.py:1536 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "可用的替代品庫存" -#: build/serializers.py:1539 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "可用的變體庫存" -#: build/serializers.py:1752 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗數量超過已分配數量" -#: build/serializers.py:1789 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "庫存耗用的可選備註" -#: build/serializers.py:1806 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "生產項必須指向正確的生產工單" -#: build/serializers.py:1811 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "重複的生產項分配" -#: build/serializers.py:1829 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "生產行必須指向正確的生產工單" -#: build/serializers.py:1834 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "重複的生產行分配" -#: build/serializers.py:1846 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "至少必須提供一個項目或一行" @@ -1495,43 +1494,43 @@ msgstr "被掛起" msgid "Cancelled" msgstr "已取消" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:574 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "完成" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "生產訂單所需庫存" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "生產工單 {build} 需要額外庫存" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "逾期的生產訂單" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "生產訂單 {bo} 現已逾期" -#: common/api.py:711 +#: common/api.py:723 msgid "Is Link" msgstr "是否鏈接" -#: common/api.py:719 +#: common/api.py:731 msgid "Is File" msgstr "是否為文件" -#: common/api.py:766 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "用户沒有權限刪除此附件" -#: common/api.py:779 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "用户沒有權限刪除此附件" @@ -1555,794 +1554,794 @@ msgstr "暫無插件" msgid "Project Code Label" msgstr "項目編碼標籤" -#: common/models.py:105 common/models.py:130 common/models.py:3169 +#: common/models.py:106 common/models.py:131 common/models.py:3176 msgid "Updated" msgstr "已是最新" -#: common/models.py:106 common/models.py:131 +#: common/models.py:107 common/models.py:132 order/models.py:507 msgid "Timestamp of last update" msgstr "最後更新時間戳" -#: common/models.py:143 +#: common/models.py:144 msgid "Update By" msgstr "更新者" -#: common/models.py:144 +#: common/models.py:145 msgid "User who last updated this object" msgstr "最後更新此物件的使用者" -#: common/models.py:171 +#: common/models.py:172 msgid "Unique project code" msgstr "唯一項目編碼" -#: common/models.py:178 +#: common/models.py:179 msgid "Project description" msgstr "項目描述" -#: common/models.py:187 +#: common/models.py:188 msgid "User or group responsible for this project" msgstr "負責此項目的用户或羣組" -#: common/models.py:777 common/models.py:1293 common/models.py:1331 +#: common/models.py:784 common/models.py:1300 common/models.py:1338 msgid "Settings key" msgstr "設定鍵值" -#: common/models.py:781 +#: common/models.py:788 msgid "Settings value" msgstr "設定值" -#: common/models.py:836 +#: common/models.py:843 msgid "Chosen value is not a valid option" msgstr "所選值不是一個有效的選項" -#: common/models.py:852 +#: common/models.py:859 msgid "Value must be a boolean value" msgstr "該值必須是布爾值" -#: common/models.py:860 +#: common/models.py:867 msgid "Value must be an integer value" msgstr "該值必須為整數" -#: common/models.py:868 +#: common/models.py:875 msgid "Value must be a valid number" msgstr "值必須為有效數字" -#: common/models.py:893 +#: common/models.py:900 msgid "Value does not pass validation checks" msgstr "值未通過驗證檢查" -#: common/models.py:915 +#: common/models.py:922 msgid "Key string must be unique" msgstr "鍵字符串必須是唯一的" -#: common/models.py:1339 common/models.py:1340 common/models.py:1444 -#: common/models.py:1445 common/models.py:1690 common/models.py:1691 -#: common/models.py:2023 common/models.py:2024 common/models.py:2822 -#: importer/models.py:101 part/models.py:3574 part/models.py:3602 +#: common/models.py:1346 common/models.py:1347 common/models.py:1451 +#: common/models.py:1452 common/models.py:1697 common/models.py:1698 +#: common/models.py:2030 common/models.py:2031 common/models.py:2829 +#: importer/models.py:101 part/models.py:3569 part/models.py:3597 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "使用者" -#: common/models.py:1362 +#: common/models.py:1369 msgid "Price break quantity" msgstr "批發價數量" -#: common/models.py:1369 company/serializers.py:316 order/models.py:1845 -#: order/models.py:3050 +#: common/models.py:1376 company/serializers.py:316 order/models.py:1877 +#: order/models.py:3080 msgid "Price" msgstr "價格" -#: common/models.py:1370 +#: common/models.py:1377 msgid "Unit price at specified quantity" msgstr "指定數量的單位價格" -#: common/models.py:1421 common/models.py:1606 +#: common/models.py:1428 common/models.py:1613 msgid "Endpoint" msgstr "端點" -#: common/models.py:1422 +#: common/models.py:1429 msgid "Endpoint at which this webhook is received" msgstr "接收此網絡鈎子的端點" -#: common/models.py:1432 +#: common/models.py:1439 msgid "Name for this webhook" msgstr "此網絡鈎子的名稱" -#: common/models.py:1436 common/models.py:2264 common/models.py:2371 -#: company/models.py:193 company/models.py:781 machine/models.py:40 -#: part/models.py:1288 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:319 +#: common/models.py:1443 common/models.py:2271 common/models.py:2378 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1282 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:332 users/serializers.py:424 msgid "Active" msgstr "激活" -#: common/models.py:1436 +#: common/models.py:1443 msgid "Is this webhook active" msgstr "網絡鈎子是否已啓用" -#: common/models.py:1452 users/models.py:172 +#: common/models.py:1459 users/models.py:172 msgid "Token" msgstr "令牌" -#: common/models.py:1453 +#: common/models.py:1460 msgid "Token for access" msgstr "訪問令牌" -#: common/models.py:1461 +#: common/models.py:1468 msgid "Secret" msgstr "密鑰" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Shared secret for HMAC" msgstr "HMAC共享密鑰" -#: common/models.py:1570 common/models.py:3059 +#: common/models.py:1577 common/models.py:3066 msgid "Message ID" msgstr "消息ID" -#: common/models.py:1571 common/models.py:3049 +#: common/models.py:1578 common/models.py:3056 msgid "Unique identifier for this message" msgstr "此郵件的唯一標識符" -#: common/models.py:1579 +#: common/models.py:1586 msgid "Host" msgstr "主機" -#: common/models.py:1580 +#: common/models.py:1587 msgid "Host from which this message was received" msgstr "接收此消息的主機" -#: common/models.py:1588 +#: common/models.py:1595 msgid "Header" msgstr "標題" -#: common/models.py:1589 +#: common/models.py:1596 msgid "Header of this message" msgstr "此消息的標題" -#: common/models.py:1596 +#: common/models.py:1603 msgid "Body" msgstr "正文" -#: common/models.py:1597 +#: common/models.py:1604 msgid "Body of this message" msgstr "此消息的正文" -#: common/models.py:1607 +#: common/models.py:1614 msgid "Endpoint on which this message was received" msgstr "接收此消息的終點" -#: common/models.py:1612 +#: common/models.py:1619 msgid "Worked on" msgstr "工作於" -#: common/models.py:1613 +#: common/models.py:1620 msgid "Was the work on this message finished?" msgstr "這條消息的工作完成了嗎?" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Id" msgstr "標識" -#: common/models.py:1741 +#: common/models.py:1748 msgid "Title" msgstr "標題" -#: common/models.py:1743 common/models.py:2006 company/models.py:187 -#: company/models.py:474 company/models.py:544 company/models.py:804 -#: order/models.py:460 order/models.py:1789 order/models.py:2345 -#: part/models.py:1181 +#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1821 order/models.py:2382 +#: part/models.py:1175 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "連結" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Published" msgstr "已發佈" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Author" msgstr "作者" -#: common/models.py:1749 +#: common/models.py:1756 msgid "Summary" msgstr "摘要" -#: common/models.py:1752 common/models.py:3026 +#: common/models.py:1759 common/models.py:3033 msgid "Read" msgstr "閲讀" -#: common/models.py:1752 +#: common/models.py:1759 msgid "Was this news item read?" msgstr "這條新聞被閲讀了嗎?" -#: common/models.py:1769 +#: common/models.py:1776 msgid "Image file" msgstr "圖像文件" -#: common/models.py:1781 +#: common/models.py:1788 msgid "Target model type for this image" msgstr "此圖像的目標模型類型" -#: common/models.py:1785 +#: common/models.py:1792 msgid "Target model ID for this image" msgstr "此圖像的目標型號ID" -#: common/models.py:1807 +#: common/models.py:1814 msgid "Custom Unit" msgstr "自定義單位" -#: common/models.py:1825 +#: common/models.py:1832 msgid "Unit symbol must be unique" msgstr "單位符號必須唯一" -#: common/models.py:1840 +#: common/models.py:1847 msgid "Unit name must be a valid identifier" msgstr "單位名稱必須是有效的標識符" -#: common/models.py:1859 +#: common/models.py:1866 msgid "Unit name" msgstr "單位名稱" -#: common/models.py:1866 +#: common/models.py:1873 msgid "Symbol" msgstr "符號" -#: common/models.py:1867 +#: common/models.py:1874 msgid "Optional unit symbol" msgstr "可選單位符號" -#: common/models.py:1873 +#: common/models.py:1880 msgid "Definition" msgstr "定義" -#: common/models.py:1874 +#: common/models.py:1881 msgid "Unit definition" msgstr "單位定義" -#: common/models.py:1934 common/models.py:1997 stock/models.py:3071 -#: stock/serializers.py:249 +#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: stock/serializers.py:258 msgid "Attachment" msgstr "附件" -#: common/models.py:1951 +#: common/models.py:1958 msgid "Missing file" msgstr "缺少檔案" -#: common/models.py:1952 +#: common/models.py:1959 msgid "Missing external link" msgstr "缺少外部連結" -#: common/models.py:1989 common/models.py:2507 +#: common/models.py:1996 common/models.py:2514 msgid "Model type" msgstr "模型類型" -#: common/models.py:1990 +#: common/models.py:1997 msgid "Target model type for image" msgstr "圖像的目標模型類型" -#: common/models.py:1998 +#: common/models.py:2005 msgid "Select file to attach" msgstr "選擇附件" -#: common/models.py:2014 +#: common/models.py:2021 msgid "Comment" msgstr "註解" -#: common/models.py:2015 +#: common/models.py:2022 msgid "Attachment comment" msgstr "附件評論" -#: common/models.py:2031 +#: common/models.py:2038 msgid "Upload date" msgstr "上傳日期" -#: common/models.py:2032 +#: common/models.py:2039 msgid "Date the file was uploaded" msgstr "上傳文件的日期" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size" msgstr "文件大小" -#: common/models.py:2036 +#: common/models.py:2043 msgid "File size in bytes" msgstr "文件大小,以字節為單位" -#: common/models.py:2074 common/serializers.py:715 +#: common/models.py:2081 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "為附件指定的模型類型無效" -#: common/models.py:2095 +#: common/models.py:2102 msgid "Custom State" msgstr "自定狀態" -#: common/models.py:2096 +#: common/models.py:2103 msgid "Custom States" msgstr "定製狀態" -#: common/models.py:2101 +#: common/models.py:2108 msgid "Reference Status Set" msgstr "參考狀態設定" -#: common/models.py:2102 +#: common/models.py:2109 msgid "Status set that is extended with this custom state" msgstr "使用此自定義狀態擴展狀態的狀態集" -#: common/models.py:2106 generic/states/serializers.py:18 +#: common/models.py:2113 generic/states/serializers.py:18 msgid "Logical Key" msgstr "邏輯密鑰" -#: common/models.py:2108 +#: common/models.py:2115 msgid "State logical key that is equal to this custom state in business logic" msgstr "等同於商業邏輯中自定義狀態的狀態邏輯鍵" -#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3063 +#: common/models.py:2120 common/models.py:2359 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "值" -#: common/models.py:2114 +#: common/models.py:2121 msgid "Numerical value that will be saved in the models database" msgstr "將儲存於模型資料庫中的數值" -#: common/models.py:2120 +#: common/models.py:2127 msgid "Name of the state" msgstr "狀態名" -#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 +#: common/models.py:2136 common/models.py:2365 generic/states/serializers.py:22 msgid "Label" msgstr "標籤" -#: common/models.py:2130 +#: common/models.py:2137 msgid "Label that will be displayed in the frontend" msgstr "在前端顯示的標籤" -#: common/models.py:2137 generic/states/serializers.py:24 +#: common/models.py:2144 generic/states/serializers.py:24 msgid "Color" msgstr "顏色" -#: common/models.py:2138 +#: common/models.py:2145 msgid "Color that will be displayed in the frontend" msgstr "將在前端顯示顏色" -#: common/models.py:2146 +#: common/models.py:2153 msgid "Model" msgstr "模式" -#: common/models.py:2147 +#: common/models.py:2154 msgid "Model this state is associated with" msgstr "該狀態關聯的模型" -#: common/models.py:2162 +#: common/models.py:2169 msgid "Model must be selected" msgstr "必須選定模型" -#: common/models.py:2165 +#: common/models.py:2172 msgid "Key must be selected" msgstr "必須選取密鑰" -#: common/models.py:2168 +#: common/models.py:2175 msgid "Logical key must be selected" msgstr "必須選中邏輯密鑰" -#: common/models.py:2172 +#: common/models.py:2179 msgid "Key must be different from logical key" msgstr "密鑰必須不同於邏輯密鑰" -#: common/models.py:2179 +#: common/models.py:2186 msgid "Valid reference status class must be provided" msgstr "必須提供有效參考狀態類別" -#: common/models.py:2185 +#: common/models.py:2192 msgid "Key must be different from the logical keys of the reference status" msgstr "密鑰必須不同於參考狀態的邏輯密鑰" -#: common/models.py:2192 +#: common/models.py:2199 msgid "Logical key must be in the logical keys of the reference status" msgstr "邏輯密鑰必須在參考狀態的邏輯鍵中" -#: common/models.py:2199 +#: common/models.py:2206 msgid "Name must be different from the names of the reference status" msgstr "名稱必須不同於參考狀態的名稱" -#: common/models.py:2239 common/models.py:2346 common/models.py:2552 +#: common/models.py:2246 common/models.py:2353 common/models.py:2559 msgid "Selection List" msgstr "選擇列表" -#: common/models.py:2240 +#: common/models.py:2247 msgid "Selection Lists" msgstr "選擇列表" -#: common/models.py:2245 +#: common/models.py:2252 msgid "Name of the selection list" msgstr "選擇列表名稱" -#: common/models.py:2252 +#: common/models.py:2259 msgid "Description of the selection list" msgstr "選擇列表描述" -#: common/models.py:2258 part/models.py:1293 +#: common/models.py:2265 part/models.py:1287 msgid "Locked" msgstr "已鎖定" -#: common/models.py:2259 +#: common/models.py:2266 msgid "Is this selection list locked?" msgstr "此選擇列表是否已鎖定?" -#: common/models.py:2265 +#: common/models.py:2272 msgid "Can this selection list be used?" msgstr "此選擇列表是否可使用?" -#: common/models.py:2273 +#: common/models.py:2280 msgid "Source Plugin" msgstr "來源模組" -#: common/models.py:2274 +#: common/models.py:2281 msgid "Plugin which provides the selection list" msgstr "提供此選擇列表的模組" -#: common/models.py:2279 +#: common/models.py:2286 msgid "Source String" msgstr "來源字串" -#: common/models.py:2280 +#: common/models.py:2287 msgid "Optional string identifying the source used for this list" msgstr "用於標示此列表來源的可選字串" -#: common/models.py:2289 +#: common/models.py:2296 msgid "Default Entry" msgstr "預設項目" -#: common/models.py:2290 +#: common/models.py:2297 msgid "Default entry for this selection list" msgstr "此選擇列表的預設項目" -#: common/models.py:2295 common/models.py:3164 +#: common/models.py:2302 common/models.py:3171 msgid "Created" msgstr "已創建" -#: common/models.py:2296 +#: common/models.py:2303 msgid "Date and time that the selection list was created" msgstr "選擇列表建立的日期與時間" -#: common/models.py:2301 +#: common/models.py:2308 msgid "Last Updated" msgstr "最近更新" -#: common/models.py:2302 +#: common/models.py:2309 msgid "Date and time that the selection list was last updated" msgstr "選擇列表最近更新的日期與時間" -#: common/models.py:2336 +#: common/models.py:2343 msgid "Selection List Entry" msgstr "選擇列表項目" -#: common/models.py:2337 +#: common/models.py:2344 msgid "Selection List Entries" msgstr "選擇列表項目" -#: common/models.py:2347 +#: common/models.py:2354 msgid "Selection list to which this entry belongs" msgstr "該項目所屬的選擇列表" -#: common/models.py:2353 +#: common/models.py:2360 msgid "Value of the selection list entry" msgstr "選擇列表項目的值" -#: common/models.py:2359 +#: common/models.py:2366 msgid "Label for the selection list entry" msgstr "選擇列表項目的標籤" -#: common/models.py:2365 +#: common/models.py:2372 msgid "Description of the selection list entry" msgstr "選擇列表項目的描述" -#: common/models.py:2372 +#: common/models.py:2379 msgid "Is this selection list entry active?" msgstr "此選擇列表項目是否啟用?" -#: common/models.py:2406 +#: common/models.py:2413 msgid "Parameter Template" msgstr "參數模板" -#: common/models.py:2407 +#: common/models.py:2414 msgid "Parameter Templates" msgstr "" -#: common/models.py:2444 +#: common/models.py:2451 msgid "Checkbox parameters cannot have units" msgstr "勾選框參數不能有單位" -#: common/models.py:2449 +#: common/models.py:2456 msgid "Checkbox parameters cannot have choices" msgstr "複選框參數不能有選項" -#: common/models.py:2469 part/models.py:3672 +#: common/models.py:2476 part/models.py:3667 msgid "Choices must be unique" msgstr "選擇必須是唯一的" -#: common/models.py:2486 +#: common/models.py:2493 msgid "Parameter template name must be unique" msgstr "參數模板名稱必須是唯一的" -#: common/models.py:2508 +#: common/models.py:2515 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2514 +#: common/models.py:2521 msgid "Parameter Name" msgstr "參數名稱" -#: common/models.py:2520 part/models.py:1246 +#: common/models.py:2527 part/models.py:1240 msgid "Units" msgstr "單位" -#: common/models.py:2521 +#: common/models.py:2528 msgid "Physical units for this parameter" msgstr "此參數的物理單位" -#: common/models.py:2529 +#: common/models.py:2536 msgid "Parameter description" msgstr "參數説明" -#: common/models.py:2535 +#: common/models.py:2542 msgid "Checkbox" msgstr "勾選框" -#: common/models.py:2536 +#: common/models.py:2543 msgid "Is this parameter a checkbox?" msgstr "此參數是否為勾選框?" -#: common/models.py:2541 part/models.py:3759 +#: common/models.py:2548 part/models.py:3754 msgid "Choices" msgstr "選項" -#: common/models.py:2542 +#: common/models.py:2549 msgid "Valid choices for this parameter (comma-separated)" msgstr "此參數的有效選擇 (逗號分隔)" -#: common/models.py:2553 +#: common/models.py:2560 msgid "Selection list for this parameter" msgstr "此參數的選擇清單" -#: common/models.py:2558 part/models.py:3734 report/models.py:287 +#: common/models.py:2565 part/models.py:3729 report/models.py:287 msgid "Enabled" msgstr "已啓用" -#: common/models.py:2559 +#: common/models.py:2566 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2600 +#: common/models.py:2607 msgid "Parameter" -msgstr "" +msgstr "參數" -#: common/models.py:2601 +#: common/models.py:2608 msgid "Parameters" -msgstr "" +msgstr "參數集" -#: common/models.py:2647 +#: common/models.py:2654 msgid "Invalid choice for parameter value" msgstr "無效的參數值選擇" -#: common/models.py:2717 common/serializers.py:810 +#: common/models.py:2724 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2753 +#: common/models.py:2760 msgid "Model ID" msgstr "" -#: common/models.py:2754 +#: common/models.py:2761 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 +#: common/models.py:2770 common/setting/system.py:465 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:235 +#: stock/serializers.py:244 msgid "Template" msgstr "模板" -#: common/models.py:2764 +#: common/models.py:2771 msgid "Parameter template" msgstr "" -#: common/models.py:2769 common/models.py:2811 importer/models.py:568 +#: common/models.py:2776 common/models.py:2818 importer/models.py:574 msgid "Data" msgstr "數據" -#: common/models.py:2770 +#: common/models.py:2777 msgid "Parameter Value" msgstr "參數值" -#: common/models.py:2779 company/models.py:821 order/serializers.py:841 -#: order/serializers.py:2044 part/models.py:4052 part/models.py:4421 +#: common/models.py:2786 company/models.py:826 order/serializers.py:854 +#: order/serializers.py:2036 part/models.py:4047 part/models.py:4416 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:817 +#: stock/serializers.py:828 msgid "Note" msgstr "備註" -#: common/models.py:2780 stock/serializers.py:722 +#: common/models.py:2787 stock/serializers.py:733 msgid "Optional note field" msgstr "可選註釋字段" -#: common/models.py:2807 +#: common/models.py:2814 msgid "Barcode Scan" msgstr "掃描條碼" -#: common/models.py:2812 +#: common/models.py:2819 msgid "Barcode data" msgstr "條碼數據" -#: common/models.py:2823 +#: common/models.py:2830 msgid "User who scanned the barcode" msgstr "掃描條碼" -#: common/models.py:2828 importer/models.py:70 +#: common/models.py:2835 importer/models.py:70 msgid "Timestamp" msgstr "時間戳" -#: common/models.py:2829 +#: common/models.py:2836 msgid "Date and time of the barcode scan" msgstr "掃描條碼的日期和時間" -#: common/models.py:2835 +#: common/models.py:2842 msgid "URL endpoint which processed the barcode" msgstr "處理條碼的 URL 終點" -#: common/models.py:2842 order/models.py:1835 plugin/serializers.py:93 +#: common/models.py:2849 order/models.py:1867 plugin/serializers.py:93 msgid "Context" msgstr "上下文" -#: common/models.py:2843 +#: common/models.py:2850 msgid "Context data for the barcode scan" msgstr "掃描條碼的上下文數據" -#: common/models.py:2850 +#: common/models.py:2857 msgid "Response" msgstr "響應" -#: common/models.py:2851 +#: common/models.py:2858 msgid "Response data from the barcode scan" msgstr "掃描條碼的響應數據" -#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3057 +#: common/models.py:2864 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "結果" -#: common/models.py:2858 +#: common/models.py:2865 msgid "Was the barcode scan successful?" msgstr "條碼掃描成功嗎?" -#: common/models.py:2940 +#: common/models.py:2947 msgid "An error occurred" msgstr "發生錯誤" -#: common/models.py:2961 +#: common/models.py:2968 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8:已保護電子郵件日誌刪除。請將 INVENTREE_PROTECT_EMAIL_LOG 設為 False 以允許刪除。" -#: common/models.py:3008 +#: common/models.py:3015 msgid "Email Message" msgstr "電子郵件訊息" -#: common/models.py:3009 +#: common/models.py:3016 msgid "Email Messages" msgstr "電子郵件訊息" -#: common/models.py:3016 +#: common/models.py:3023 msgid "Announced" msgstr "已公告" -#: common/models.py:3018 +#: common/models.py:3025 msgid "Sent" msgstr "已發送" -#: common/models.py:3019 +#: common/models.py:3026 msgid "Failed" msgstr "失敗" -#: common/models.py:3022 +#: common/models.py:3029 msgid "Delivered" msgstr "已送達" -#: common/models.py:3030 +#: common/models.py:3037 msgid "Confirmed" msgstr "已確認" -#: common/models.py:3036 +#: common/models.py:3043 msgid "Inbound" msgstr "入站" -#: common/models.py:3037 +#: common/models.py:3044 msgid "Outbound" msgstr "出站" -#: common/models.py:3042 +#: common/models.py:3049 msgid "No Reply" msgstr "不回覆" -#: common/models.py:3043 +#: common/models.py:3050 msgid "Track Delivery" msgstr "追蹤投遞" -#: common/models.py:3044 +#: common/models.py:3051 msgid "Track Read" msgstr "追蹤已讀" -#: common/models.py:3045 +#: common/models.py:3052 msgid "Track Click" msgstr "追蹤點擊" -#: common/models.py:3048 common/models.py:3151 +#: common/models.py:3055 common/models.py:3158 msgid "Global ID" msgstr "全域 ID" -#: common/models.py:3061 +#: common/models.py:3068 msgid "Identifier for this message (might be supplied by external system)" msgstr "此訊息的識別碼(可能由外部系統提供)" -#: common/models.py:3068 +#: common/models.py:3075 msgid "Thread ID" msgstr "討論串 ID" -#: common/models.py:3070 +#: common/models.py:3077 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "此訊息討論串的識別碼(可能由外部系統提供)" -#: common/models.py:3079 +#: common/models.py:3086 msgid "Thread" msgstr "討論串" -#: common/models.py:3080 +#: common/models.py:3087 msgid "Linked thread for this message" msgstr "此訊息所連結的討論串" -#: common/models.py:3096 +#: common/models.py:3103 msgid "Priority" -msgstr "" +msgstr "優先序" -#: common/models.py:3138 +#: common/models.py:3145 msgid "Email Thread" msgstr "電子郵件討論串" -#: common/models.py:3139 +#: common/models.py:3146 msgid "Email Threads" msgstr "電子郵件討論串" -#: common/models.py:3145 generic/states/serializers.py:16 +#: common/models.py:3152 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "鍵" -#: common/models.py:3148 +#: common/models.py:3155 msgid "Unique key for this thread (used to identify the thread)" msgstr "此討論串的唯一鍵(用於辨識)" -#: common/models.py:3152 +#: common/models.py:3159 msgid "Unique identifier for this thread" msgstr "此討論串的唯一識別碼" -#: common/models.py:3159 +#: common/models.py:3166 msgid "Started Internal" msgstr "內部建立" -#: common/models.py:3160 +#: common/models.py:3167 msgid "Was this thread started internally?" msgstr "此討論串是否為內部建立?" -#: common/models.py:3165 +#: common/models.py:3172 msgid "Date and time that the thread was created" msgstr "討論串建立的日期時間" -#: common/models.py:3170 +#: common/models.py:3177 msgid "Date and time that the thread was last updated" msgstr "討論串最後更新的日期時間" @@ -2364,7 +2363,7 @@ msgstr "{verbose_name} 已取消" msgid "A order that is assigned to you was canceled" msgstr "分配給您的訂單已取消" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:598 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 msgid "Items Received" msgstr "收到的物品" @@ -2392,1235 +2391,1243 @@ msgstr "表示此設定是否被環境變數覆蓋" msgid "Override" msgstr "覆蓋" -#: common/serializers.py:529 +#: common/serializers.py:601 msgid "Is Running" msgstr "正在運行" -#: common/serializers.py:535 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "等待完成的任務" -#: common/serializers.py:541 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "預定的任務" -#: common/serializers.py:547 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "失敗的任務" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Task ID" msgstr "任務ID" -#: common/serializers.py:562 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "唯一任務ID" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock" msgstr "鎖定" -#: common/serializers.py:564 +#: common/serializers.py:636 msgid "Lock time" msgstr "鎖定時間" -#: common/serializers.py:566 +#: common/serializers.py:638 msgid "Task name" msgstr "任務名稱" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function" msgstr "功能" -#: common/serializers.py:568 +#: common/serializers.py:640 msgid "Function name" msgstr "功能名稱" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Arguments" msgstr "參數" -#: common/serializers.py:570 +#: common/serializers.py:642 msgid "Task arguments" msgstr "任務參數" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "關鍵字參數" -#: common/serializers.py:573 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "任務關鍵詞參數" -#: common/serializers.py:683 +#: common/serializers.py:755 msgid "Filename" msgstr "檔案名稱" -#: common/serializers.py:690 common/serializers.py:757 -#: common/serializers.py:832 importer/models.py:90 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "模型類型" -#: common/serializers.py:718 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "用户無權為此模式創建或編輯附件" -#: common/serializers.py:813 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:883 common/serializers.py:986 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "選擇列表已鎖定" -#: common/setting/system.py:96 +#: common/setting/system.py:97 msgid "No group" msgstr "無分組" -#: common/setting/system.py:169 +#: common/setting/system.py:170 msgid "Site URL is locked by configuration" msgstr "網站 URL 已配置為鎖定" -#: common/setting/system.py:186 +#: common/setting/system.py:187 msgid "Restart required" msgstr "需要重啓" -#: common/setting/system.py:187 +#: common/setting/system.py:188 msgid "A setting has been changed which requires a server restart" msgstr "設置已更改,需要服務器重啓" -#: common/setting/system.py:193 +#: common/setting/system.py:194 msgid "Pending migrations" msgstr "等待遷移" -#: common/setting/system.py:194 +#: common/setting/system.py:195 msgid "Number of pending database migrations" msgstr "待處理的數據庫遷移數" -#: common/setting/system.py:199 +#: common/setting/system.py:200 msgid "Active warning codes" msgstr "啟用中的警告碼" -#: common/setting/system.py:200 +#: common/setting/system.py:201 msgid "A dict of active warning codes" msgstr "啟用中警告碼的字典" -#: common/setting/system.py:206 +#: common/setting/system.py:207 msgid "Instance ID" msgstr "實例 ID" -#: common/setting/system.py:207 +#: common/setting/system.py:208 msgid "Unique identifier for this InvenTree instance" msgstr "此 InvenTree 實例的唯一識別碼" -#: common/setting/system.py:212 +#: common/setting/system.py:213 msgid "Announce ID" msgstr "公告 ID" -#: common/setting/system.py:214 +#: common/setting/system.py:215 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "在伺服器狀態資訊中公告此伺服器的實例 ID(未驗證也可見)" -#: common/setting/system.py:220 +#: common/setting/system.py:221 msgid "Server Instance Name" msgstr "服務器實例名稱" -#: common/setting/system.py:222 +#: common/setting/system.py:223 msgid "String descriptor for the server instance" msgstr "服務器實例的字符串描述符" -#: common/setting/system.py:226 +#: common/setting/system.py:227 msgid "Use instance name" msgstr "使用實例名稱" -#: common/setting/system.py:227 +#: common/setting/system.py:228 msgid "Use the instance name in the title-bar" msgstr "在標題欄中使用實例名稱" -#: common/setting/system.py:232 +#: common/setting/system.py:233 msgid "Restrict showing `about`" msgstr "限制顯示 `關於` 信息" -#: common/setting/system.py:233 +#: common/setting/system.py:234 msgid "Show the `about` modal only to superusers" msgstr "只向超級管理員顯示關於信息" -#: common/setting/system.py:238 company/models.py:146 company/models.py:147 +#: common/setting/system.py:239 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "公司名稱" -#: common/setting/system.py:239 +#: common/setting/system.py:240 msgid "Internal company name" msgstr "內部公司名稱" -#: common/setting/system.py:243 +#: common/setting/system.py:244 msgid "Base URL" msgstr "基本 URL" -#: common/setting/system.py:244 +#: common/setting/system.py:245 msgid "Base URL for server instance" msgstr "服務器實例的基準 URL" -#: common/setting/system.py:250 +#: common/setting/system.py:251 msgid "Default Currency" msgstr "默認貨幣單位" -#: common/setting/system.py:251 +#: common/setting/system.py:252 msgid "Select base currency for pricing calculations" msgstr "選擇價格計算的默認貨幣" -#: common/setting/system.py:257 +#: common/setting/system.py:258 msgid "Supported Currencies" msgstr "支持幣種" -#: common/setting/system.py:258 +#: common/setting/system.py:259 msgid "List of supported currency codes" msgstr "支持的貨幣代碼列表" -#: common/setting/system.py:264 +#: common/setting/system.py:265 msgid "Currency Update Interval" msgstr "貨幣更新間隔時間" -#: common/setting/system.py:265 +#: common/setting/system.py:266 msgid "How often to update exchange rates (set to zero to disable)" msgstr "檢查更新的頻率(設置為零以禁用)" -#: common/setting/system.py:267 common/setting/system.py:307 -#: common/setting/system.py:320 common/setting/system.py:328 -#: common/setting/system.py:335 common/setting/system.py:344 -#: common/setting/system.py:353 common/setting/system.py:594 -#: common/setting/system.py:622 common/setting/system.py:721 -#: common/setting/system.py:1122 common/setting/system.py:1138 -#: common/setting/system.py:1155 +#: common/setting/system.py:268 common/setting/system.py:308 +#: common/setting/system.py:321 common/setting/system.py:329 +#: common/setting/system.py:336 common/setting/system.py:345 +#: common/setting/system.py:354 common/setting/system.py:595 +#: common/setting/system.py:623 common/setting/system.py:730 +#: common/setting/system.py:1131 common/setting/system.py:1147 +#: common/setting/system.py:1164 msgid "days" msgstr "天" -#: common/setting/system.py:271 +#: common/setting/system.py:272 msgid "Currency Update Plugin" msgstr "幣種更新插件" -#: common/setting/system.py:272 +#: common/setting/system.py:273 msgid "Currency update plugin to use" msgstr "使用貨幣更新插件" -#: common/setting/system.py:277 +#: common/setting/system.py:278 msgid "Download from URL" msgstr "從URL下載" -#: common/setting/system.py:278 +#: common/setting/system.py:279 msgid "Allow download of remote images and files from external URL" msgstr "允許從外部 URL 下載遠程圖片和文件" -#: common/setting/system.py:283 +#: common/setting/system.py:284 msgid "Download Size Limit" msgstr "下載大小限制" -#: common/setting/system.py:284 +#: common/setting/system.py:285 msgid "Maximum allowable download size for remote image" msgstr "遠程圖片的最大允許下載大小" -#: common/setting/system.py:290 +#: common/setting/system.py:291 msgid "User-agent used to download from URL" msgstr "用於從 URL 下載的 User-agent" -#: common/setting/system.py:292 +#: common/setting/system.py:293 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "允許覆蓋用於從外部 URL 下載圖片和文件的 user-agent(留空為默認值)" -#: common/setting/system.py:297 +#: common/setting/system.py:298 msgid "Strict URL Validation" msgstr "嚴格的 URL 驗證" -#: common/setting/system.py:298 +#: common/setting/system.py:299 msgid "Require schema specification when validating URLs" msgstr "驗證 URL 時需要 schema 規範" -#: common/setting/system.py:303 +#: common/setting/system.py:304 msgid "Update Check Interval" msgstr "更新檢查間隔" -#: common/setting/system.py:304 +#: common/setting/system.py:305 msgid "How often to check for updates (set to zero to disable)" msgstr "檢查更新的頻率(設置為零以禁用)" -#: common/setting/system.py:310 +#: common/setting/system.py:311 msgid "Automatic Backup" msgstr "自動備份" -#: common/setting/system.py:311 +#: common/setting/system.py:312 msgid "Enable automatic backup of database and media files" msgstr "啟動資料庫和媒體文件自動備份" -#: common/setting/system.py:316 +#: common/setting/system.py:317 msgid "Auto Backup Interval" msgstr "自動備份間隔" -#: common/setting/system.py:317 +#: common/setting/system.py:318 msgid "Specify number of days between automated backup events" msgstr "指定自動備份之間的間隔天數" -#: common/setting/system.py:323 +#: common/setting/system.py:324 msgid "Task Deletion Interval" msgstr "任務刪除間隔" -#: common/setting/system.py:325 +#: common/setting/system.py:326 msgid "Background task results will be deleted after specified number of days" msgstr "後台任務結果將在指定天數後刪除" -#: common/setting/system.py:332 +#: common/setting/system.py:333 msgid "Error Log Deletion Interval" msgstr "錯誤日誌刪除間隔" -#: common/setting/system.py:333 +#: common/setting/system.py:334 msgid "Error logs will be deleted after specified number of days" msgstr "錯誤日誌將在指定天數後被刪除" -#: common/setting/system.py:339 +#: common/setting/system.py:340 msgid "Notification Deletion Interval" msgstr "通知刪除間隔" -#: common/setting/system.py:341 +#: common/setting/system.py:342 msgid "User notifications will be deleted after specified number of days" msgstr "用户通知將在指定天數後被刪除" -#: common/setting/system.py:348 +#: common/setting/system.py:349 msgid "Email Deletion Interval" msgstr "電子郵件刪除間隔" -#: common/setting/system.py:350 +#: common/setting/system.py:351 msgid "Email messages will be deleted after specified number of days" msgstr "電子郵件訊息將在指定天數後刪除" -#: common/setting/system.py:357 +#: common/setting/system.py:358 msgid "Protect Email Log" msgstr "保護電子郵件日誌" -#: common/setting/system.py:358 +#: common/setting/system.py:359 msgid "Prevent deletion of email log entries" msgstr "防止刪除電子郵件日誌紀錄" -#: common/setting/system.py:363 +#: common/setting/system.py:364 msgid "Barcode Support" msgstr "條形碼支持" -#: common/setting/system.py:364 +#: common/setting/system.py:365 msgid "Enable barcode scanner support in the web interface" msgstr "在網頁界面啓用條形碼掃描器支持" -#: common/setting/system.py:369 +#: common/setting/system.py:370 msgid "Store Barcode Results" msgstr "存儲條碼結果" -#: common/setting/system.py:370 +#: common/setting/system.py:371 msgid "Store barcode scan results in the database" msgstr "存儲條碼掃描結果" -#: common/setting/system.py:375 +#: common/setting/system.py:376 msgid "Barcode Scans Maximum Count" msgstr "條碼掃描最大計數" -#: common/setting/system.py:376 +#: common/setting/system.py:377 msgid "Maximum number of barcode scan results to store" msgstr "存儲條碼掃描結果的最大數量" -#: common/setting/system.py:381 +#: common/setting/system.py:382 msgid "Barcode Input Delay" msgstr "條形碼掃描延遲設置" -#: common/setting/system.py:382 +#: common/setting/system.py:383 msgid "Barcode input processing delay time" msgstr "條形碼輸入處理延遲時間" -#: common/setting/system.py:388 +#: common/setting/system.py:389 msgid "Barcode Webcam Support" msgstr "條碼攝像頭支持" -#: common/setting/system.py:389 +#: common/setting/system.py:390 msgid "Allow barcode scanning via webcam in browser" msgstr "允許通過網絡攝像頭掃描條形碼" -#: common/setting/system.py:394 +#: common/setting/system.py:395 msgid "Barcode Show Data" msgstr "條形碼顯示數據" -#: common/setting/system.py:395 +#: common/setting/system.py:396 msgid "Display barcode data in browser as text" msgstr "在瀏覽器中將條形碼數據顯示為文本" -#: common/setting/system.py:400 +#: common/setting/system.py:401 msgid "Barcode Generation Plugin" msgstr "條形碼生成插件" -#: common/setting/system.py:401 +#: common/setting/system.py:402 msgid "Plugin to use for internal barcode data generation" msgstr "用於內部條形碼數據生成的插件" -#: common/setting/system.py:406 +#: common/setting/system.py:407 msgid "Part Revisions" msgstr "零件修訂" -#: common/setting/system.py:407 +#: common/setting/system.py:408 msgid "Enable revision field for Part" msgstr "啓用零件修訂字段" -#: common/setting/system.py:412 +#: common/setting/system.py:413 msgid "Assembly Revision Only" msgstr "僅限裝配修訂版本" -#: common/setting/system.py:413 +#: common/setting/system.py:414 msgid "Only allow revisions for assembly parts" msgstr "僅允許對裝配零件進行修訂" -#: common/setting/system.py:418 +#: common/setting/system.py:419 msgid "Allow Deletion from Assembly" msgstr "允許從裝配中刪除" -#: common/setting/system.py:419 +#: common/setting/system.py:420 msgid "Allow deletion of parts which are used in an assembly" msgstr "允許刪除已在裝配中使用的零件" -#: common/setting/system.py:424 +#: common/setting/system.py:425 msgid "IPN Regex" msgstr "IPN 內部零件號" -#: common/setting/system.py:425 +#: common/setting/system.py:426 msgid "Regular expression pattern for matching Part IPN" msgstr "匹配零件 IPN(內部零件號)的正則表達式模式" -#: common/setting/system.py:428 +#: common/setting/system.py:429 msgid "Allow Duplicate IPN" msgstr "允許重複的 IPN(內部零件號)" -#: common/setting/system.py:429 +#: common/setting/system.py:430 msgid "Allow multiple parts to share the same IPN" msgstr "允許多個零件共享相同的 IPN(內部零件號)" -#: common/setting/system.py:434 +#: common/setting/system.py:435 msgid "Allow Editing IPN" msgstr "允許編輯 IPN(內部零件號)" -#: common/setting/system.py:435 +#: common/setting/system.py:436 msgid "Allow changing the IPN value while editing a part" msgstr "允許編輯零件時更改內部零件號" -#: common/setting/system.py:440 +#: common/setting/system.py:441 msgid "Copy Part BOM Data" msgstr "複製零件物料清單數據" -#: common/setting/system.py:441 +#: common/setting/system.py:442 msgid "Copy BOM data by default when duplicating a part" msgstr "複製零件時默認複製物料清單數據" -#: common/setting/system.py:446 +#: common/setting/system.py:447 msgid "Copy Part Parameter Data" msgstr "複製零件參數數據" -#: common/setting/system.py:447 +#: common/setting/system.py:448 msgid "Copy parameter data by default when duplicating a part" msgstr "複製零件時默認複製參數數據" -#: common/setting/system.py:452 +#: common/setting/system.py:453 msgid "Copy Part Test Data" msgstr "複製零件測試數據" -#: common/setting/system.py:453 +#: common/setting/system.py:454 msgid "Copy test data by default when duplicating a part" msgstr "複製零件時默認複製測試數據" -#: common/setting/system.py:458 +#: common/setting/system.py:459 msgid "Copy Category Parameter Templates" msgstr "複製類別參數模板" -#: common/setting/system.py:459 +#: common/setting/system.py:460 msgid "Copy category parameter templates when creating a part" msgstr "創建零件時複製類別參數模板" -#: common/setting/system.py:465 +#: common/setting/system.py:466 msgid "Parts are templates by default" msgstr "零件默認為模板" -#: common/setting/system.py:471 +#: common/setting/system.py:472 msgid "Parts can be assembled from other components by default" msgstr "默認情況下,元件可由其他零件組裝而成" -#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1694 -#: part/serializers.py:1701 +#: common/setting/system.py:477 part/models.py:1253 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "組件" -#: common/setting/system.py:477 +#: common/setting/system.py:478 msgid "Parts can be used as sub-components by default" msgstr "默認情況下,零件可用作子部件" -#: common/setting/system.py:482 part/models.py:1277 +#: common/setting/system.py:483 part/models.py:1271 msgid "Purchaseable" msgstr "可購買" -#: common/setting/system.py:483 +#: common/setting/system.py:484 msgid "Parts are purchaseable by default" msgstr "默認情況下可購買零件" -#: common/setting/system.py:488 part/models.py:1283 stock/api.py:643 +#: common/setting/system.py:489 part/models.py:1277 stock/api.py:642 msgid "Salable" msgstr "可銷售" -#: common/setting/system.py:489 +#: common/setting/system.py:490 msgid "Parts are salable by default" msgstr "零件默認為可銷售" -#: common/setting/system.py:495 +#: common/setting/system.py:496 msgid "Parts are trackable by default" msgstr "默認情況下可跟蹤零件" -#: common/setting/system.py:500 part/models.py:1299 +#: common/setting/system.py:501 part/models.py:1293 msgid "Virtual" msgstr "虛擬的" -#: common/setting/system.py:501 +#: common/setting/system.py:502 msgid "Parts are virtual by default" msgstr "默認情況下,零件是虛擬的" -#: common/setting/system.py:506 +#: common/setting/system.py:507 msgid "Show related parts" msgstr "顯示相關零件" -#: common/setting/system.py:507 +#: common/setting/system.py:508 msgid "Display related parts for a part" msgstr "顯示零件的相關零件" -#: common/setting/system.py:512 +#: common/setting/system.py:513 msgid "Initial Stock Data" msgstr "初始庫存數據" -#: common/setting/system.py:513 +#: common/setting/system.py:514 msgid "Allow creation of initial stock when adding a new part" msgstr "允許在添加新零件時創建初始庫存" -#: common/setting/system.py:518 +#: common/setting/system.py:519 msgid "Initial Supplier Data" msgstr "初始供應商數據" -#: common/setting/system.py:520 +#: common/setting/system.py:521 msgid "Allow creation of initial supplier data when adding a new part" msgstr "允許在添加新零件時創建初始供應商數據" -#: common/setting/system.py:526 +#: common/setting/system.py:527 msgid "Part Name Display Format" msgstr "零件名稱顯示格式" -#: common/setting/system.py:527 +#: common/setting/system.py:528 msgid "Format to display the part name" msgstr "顯示零件名稱的格式" -#: common/setting/system.py:533 +#: common/setting/system.py:534 msgid "Part Category Default Icon" msgstr "零件類別默認圖標" -#: common/setting/system.py:534 +#: common/setting/system.py:535 msgid "Part category default icon (empty means no icon)" msgstr "零件類別默認圖標 (空表示沒有圖標)" -#: common/setting/system.py:539 +#: common/setting/system.py:540 msgid "Minimum Pricing Decimal Places" msgstr "最小定價小數位數" -#: common/setting/system.py:541 +#: common/setting/system.py:542 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "呈現定價數據時顯示的最小小數位數" -#: common/setting/system.py:552 +#: common/setting/system.py:553 msgid "Maximum Pricing Decimal Places" msgstr "最大定價小數位數" -#: common/setting/system.py:554 +#: common/setting/system.py:555 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "呈現定價數據時顯示的最大小數位數" -#: common/setting/system.py:565 +#: common/setting/system.py:566 msgid "Use Supplier Pricing" msgstr "使用供應商定價" -#: common/setting/system.py:567 +#: common/setting/system.py:568 msgid "Include supplier price breaks in overall pricing calculations" msgstr "將供應商的價批發價納入總體定價計算中" -#: common/setting/system.py:573 +#: common/setting/system.py:574 msgid "Purchase History Override" msgstr "購買歷史記錄覆蓋" -#: common/setting/system.py:575 +#: common/setting/system.py:576 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "歷史採購訂單定價優先於供應商批發價" -#: common/setting/system.py:581 +#: common/setting/system.py:582 msgid "Use Stock Item Pricing" msgstr "使用庫存項定價" -#: common/setting/system.py:583 +#: common/setting/system.py:584 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "使用手動輸入的庫存數據進行定價計算" -#: common/setting/system.py:589 +#: common/setting/system.py:590 msgid "Stock Item Pricing Age" msgstr "庫存項目定價時間" -#: common/setting/system.py:591 +#: common/setting/system.py:592 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "從定價計算中排除超過此天數的庫存項目" -#: common/setting/system.py:598 +#: common/setting/system.py:599 msgid "Use Variant Pricing" msgstr "使用變體定價" -#: common/setting/system.py:599 +#: common/setting/system.py:600 msgid "Include variant pricing in overall pricing calculations" msgstr "在整體定價計算中包括變體定價" -#: common/setting/system.py:604 +#: common/setting/system.py:605 msgid "Active Variants Only" msgstr "僅限活躍變體" -#: common/setting/system.py:606 +#: common/setting/system.py:607 msgid "Only use active variant parts for calculating variant pricing" msgstr "僅使用活躍變體零件計算變體價格" -#: common/setting/system.py:612 +#: common/setting/system.py:613 msgid "Auto Update Pricing" msgstr "自動更新定價" -#: common/setting/system.py:614 +#: common/setting/system.py:615 msgid "Automatically update part pricing when internal data changes" msgstr "當內部資料變更時自動更新零件定價" -#: common/setting/system.py:620 +#: common/setting/system.py:621 msgid "Pricing Rebuild Interval" msgstr "價格重建間隔" -#: common/setting/system.py:621 +#: common/setting/system.py:622 msgid "Number of days before part pricing is automatically updated" msgstr "零件價格自動更新前的天數" -#: common/setting/system.py:627 +#: common/setting/system.py:628 msgid "Internal Prices" msgstr "內部價格" -#: common/setting/system.py:628 +#: common/setting/system.py:629 msgid "Enable internal prices for parts" msgstr "啓用內部零件價格" -#: common/setting/system.py:633 +#: common/setting/system.py:634 msgid "Internal Price Override" msgstr "覆蓋內部價格" -#: common/setting/system.py:635 +#: common/setting/system.py:636 msgid "If available, internal prices override price range calculations" msgstr "如果有內部價格,內部價格將覆蓋價格範圍計算" -#: common/setting/system.py:641 +#: common/setting/system.py:642 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:644 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:650 msgid "Enable label printing" msgstr "啓用標籤打印功能" -#: common/setting/system.py:642 +#: common/setting/system.py:651 msgid "Enable label printing from the web interface" msgstr "啓用從網絡界面打印標籤" -#: common/setting/system.py:647 +#: common/setting/system.py:656 msgid "Label Image DPI" msgstr "標籤圖片 DPI" -#: common/setting/system.py:649 +#: common/setting/system.py:658 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "生成圖像文件以供標籤打印插件使用時的 DPI 分辨率" -#: common/setting/system.py:655 +#: common/setting/system.py:664 msgid "Enable Reports" msgstr "啓用報告" -#: common/setting/system.py:656 +#: common/setting/system.py:665 msgid "Enable generation of reports" msgstr "啓用報告生成" -#: common/setting/system.py:661 +#: common/setting/system.py:670 msgid "Debug Mode" msgstr "調試模式" -#: common/setting/system.py:662 +#: common/setting/system.py:671 msgid "Generate reports in debug mode (HTML output)" msgstr "以調試模式生成報告(HTML 輸出)" -#: common/setting/system.py:667 +#: common/setting/system.py:676 msgid "Log Report Errors" msgstr "日誌錯誤報告" -#: common/setting/system.py:668 +#: common/setting/system.py:677 msgid "Log errors which occur when generating reports" msgstr "記錄生成報告時出現的錯誤" -#: common/setting/system.py:673 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:682 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "頁面大小" -#: common/setting/system.py:674 +#: common/setting/system.py:683 msgid "Default page size for PDF reports" msgstr "PDF 報告默認頁面大小" -#: common/setting/system.py:679 +#: common/setting/system.py:688 msgid "Enforce Parameter Units" msgstr "強制參數單位" -#: common/setting/system.py:681 +#: common/setting/system.py:690 msgid "If units are provided, parameter values must match the specified units" msgstr "如果提供了單位,參數值必須與指定的單位匹配" -#: common/setting/system.py:687 +#: common/setting/system.py:696 msgid "Globally Unique Serials" msgstr "全局唯一序列號" -#: common/setting/system.py:688 +#: common/setting/system.py:697 msgid "Serial numbers for stock items must be globally unique" msgstr "庫存項的序列號必須全局唯一" -#: common/setting/system.py:693 +#: common/setting/system.py:702 msgid "Delete Depleted Stock" msgstr "刪除已耗盡的庫存" -#: common/setting/system.py:694 +#: common/setting/system.py:703 msgid "Determines default behavior when a stock item is depleted" msgstr "設置庫存耗盡時的默認行為" -#: common/setting/system.py:699 +#: common/setting/system.py:708 msgid "Batch Code Template" msgstr "批號模板" -#: common/setting/system.py:700 +#: common/setting/system.py:709 msgid "Template for generating default batch codes for stock items" msgstr "為庫存項生成默認批號的模板" -#: common/setting/system.py:704 +#: common/setting/system.py:713 msgid "Stock Expiry" msgstr "庫存過期" -#: common/setting/system.py:705 +#: common/setting/system.py:714 msgid "Enable stock expiry functionality" msgstr "啓用庫存過期功能" -#: common/setting/system.py:710 +#: common/setting/system.py:719 msgid "Sell Expired Stock" msgstr "銷售過期庫存" -#: common/setting/system.py:711 +#: common/setting/system.py:720 msgid "Allow sale of expired stock" msgstr "允許銷售過期庫存" -#: common/setting/system.py:716 +#: common/setting/system.py:725 msgid "Stock Stale Time" msgstr "庫存過期時間" -#: common/setting/system.py:718 +#: common/setting/system.py:727 msgid "Number of days stock items are considered stale before expiring" msgstr "庫存項在到期前被視為過期的天數" -#: common/setting/system.py:725 +#: common/setting/system.py:734 msgid "Build Expired Stock" msgstr "生產過期庫存" -#: common/setting/system.py:726 +#: common/setting/system.py:735 msgid "Allow building with expired stock" msgstr "允許用過期的庫存生產" -#: common/setting/system.py:731 +#: common/setting/system.py:740 msgid "Stock Ownership Control" msgstr "庫存所有權控制" -#: common/setting/system.py:732 +#: common/setting/system.py:741 msgid "Enable ownership control over stock locations and items" msgstr "啓用庫存地點和項目的所有權控制" -#: common/setting/system.py:737 +#: common/setting/system.py:746 msgid "Stock Location Default Icon" msgstr "庫存地點默認圖標" -#: common/setting/system.py:738 +#: common/setting/system.py:747 msgid "Stock location default icon (empty means no icon)" msgstr "庫存地點默認圖標 (空表示沒有圖標)" -#: common/setting/system.py:743 +#: common/setting/system.py:752 msgid "Show Installed Stock Items" msgstr "顯示已安裝的庫存項" -#: common/setting/system.py:744 +#: common/setting/system.py:753 msgid "Display installed stock items in stock tables" msgstr "在庫存表中顯示已安裝的庫存項" -#: common/setting/system.py:749 +#: common/setting/system.py:758 msgid "Check BOM when installing items" msgstr "在安裝項目時檢查物料清單" -#: common/setting/system.py:751 +#: common/setting/system.py:760 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "已安裝的庫存項目必須存在於上級零件的物料清單中" -#: common/setting/system.py:757 +#: common/setting/system.py:766 msgid "Allow Out of Stock Transfer" msgstr "允許超出庫存轉移" -#: common/setting/system.py:759 +#: common/setting/system.py:768 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "允許非庫存的庫存項目在庫存位置之間轉移" -#: common/setting/system.py:765 +#: common/setting/system.py:774 msgid "Build Order Reference Pattern" msgstr "生產訂單參考模式" -#: common/setting/system.py:766 +#: common/setting/system.py:775 msgid "Required pattern for generating Build Order reference field" msgstr "生成生產訂單參考字段所需的模式" -#: common/setting/system.py:771 common/setting/system.py:831 -#: common/setting/system.py:851 common/setting/system.py:895 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "Require Responsible Owner" msgstr "要求負責人" -#: common/setting/system.py:772 common/setting/system.py:832 -#: common/setting/system.py:852 common/setting/system.py:896 +#: common/setting/system.py:781 common/setting/system.py:841 +#: common/setting/system.py:861 common/setting/system.py:905 msgid "A responsible owner must be assigned to each order" msgstr "必須為每個訂單分配一個負責人" -#: common/setting/system.py:777 +#: common/setting/system.py:786 msgid "Require Active Part" msgstr "需要活動零件" -#: common/setting/system.py:778 +#: common/setting/system.py:787 msgid "Prevent build order creation for inactive parts" msgstr "防止為非活動零件創建生產訂單" -#: common/setting/system.py:783 +#: common/setting/system.py:792 msgid "Require Locked Part" msgstr "需要鎖定零件" -#: common/setting/system.py:784 +#: common/setting/system.py:793 msgid "Prevent build order creation for unlocked parts" msgstr "防止為未鎖定的零件創建生產訂單" -#: common/setting/system.py:789 +#: common/setting/system.py:798 msgid "Require Valid BOM" msgstr "需要有效的物料清單" -#: common/setting/system.py:790 +#: common/setting/system.py:799 msgid "Prevent build order creation unless BOM has been validated" msgstr "除非物料清單已驗證,否則禁止創建生產訂單" -#: common/setting/system.py:795 +#: common/setting/system.py:804 msgid "Require Closed Child Orders" msgstr "需要關閉子訂單" -#: common/setting/system.py:797 +#: common/setting/system.py:806 msgid "Prevent build order completion until all child orders are closed" msgstr "在所有子訂單關閉之前,阻止生產訂單的完成" -#: common/setting/system.py:803 +#: common/setting/system.py:812 msgid "External Build Orders" msgstr "外部生產工單" -#: common/setting/system.py:804 +#: common/setting/system.py:813 msgid "Enable external build order functionality" msgstr "啟用外部生產工單功能" -#: common/setting/system.py:809 +#: common/setting/system.py:818 msgid "Block Until Tests Pass" msgstr "阻止直到測試通過" -#: common/setting/system.py:811 +#: common/setting/system.py:820 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "在所有必要的測試通過之前,阻止產出完成" -#: common/setting/system.py:817 +#: common/setting/system.py:826 msgid "Enable Return Orders" msgstr "啓用訂單退貨" -#: common/setting/system.py:818 +#: common/setting/system.py:827 msgid "Enable return order functionality in the user interface" msgstr "在用户界面中啓用訂單退貨功能" -#: common/setting/system.py:823 +#: common/setting/system.py:832 msgid "Return Order Reference Pattern" msgstr "退貨訂單參考模式" -#: common/setting/system.py:825 +#: common/setting/system.py:834 msgid "Required pattern for generating Return Order reference field" msgstr "生成退貨訂單參考字段所需的模式" -#: common/setting/system.py:837 +#: common/setting/system.py:846 msgid "Edit Completed Return Orders" msgstr "編輯已完成的退貨訂單" -#: common/setting/system.py:839 +#: common/setting/system.py:848 msgid "Allow editing of return orders after they have been completed" msgstr "允許編輯已完成的退貨訂單" -#: common/setting/system.py:845 +#: common/setting/system.py:854 msgid "Sales Order Reference Pattern" msgstr "銷售訂單參考模式" -#: common/setting/system.py:846 +#: common/setting/system.py:855 msgid "Required pattern for generating Sales Order reference field" msgstr "生成銷售訂單參考字段所需參照模式" -#: common/setting/system.py:857 +#: common/setting/system.py:866 msgid "Sales Order Default Shipment" msgstr "銷售訂單默認配送方式" -#: common/setting/system.py:858 +#: common/setting/system.py:867 msgid "Enable creation of default shipment with sales orders" msgstr "啓用創建銷售訂單的默認配送功能" -#: common/setting/system.py:863 +#: common/setting/system.py:872 msgid "Edit Completed Sales Orders" msgstr "編輯已完成的銷售訂單" -#: common/setting/system.py:865 +#: common/setting/system.py:874 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "允許在訂單配送或完成後編輯銷售訂單" -#: common/setting/system.py:871 +#: common/setting/system.py:880 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:882 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:879 +#: common/setting/system.py:888 msgid "Mark Shipped Orders as Complete" msgstr "標記該訂單為已完成?" -#: common/setting/system.py:881 +#: common/setting/system.py:890 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "標記為已發貨的銷售訂單將自動完成,繞過“已發貨”狀態" -#: common/setting/system.py:887 +#: common/setting/system.py:896 msgid "Purchase Order Reference Pattern" msgstr "採購訂單參考模式" -#: common/setting/system.py:889 +#: common/setting/system.py:898 msgid "Required pattern for generating Purchase Order reference field" msgstr "生成採購訂單參考字段所需的模式" -#: common/setting/system.py:901 +#: common/setting/system.py:910 msgid "Edit Completed Purchase Orders" msgstr "編輯已完成的採購訂單" -#: common/setting/system.py:903 +#: common/setting/system.py:912 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "允許在採購訂單已配送或完成後編輯訂單" -#: common/setting/system.py:909 +#: common/setting/system.py:918 msgid "Convert Currency" msgstr "轉換幣別" -#: common/setting/system.py:910 +#: common/setting/system.py:919 msgid "Convert item value to base currency when receiving stock" msgstr "收貨時將項目價值換算為基準幣別" -#: common/setting/system.py:915 +#: common/setting/system.py:924 msgid "Auto Complete Purchase Orders" msgstr "自動完成採購訂單" -#: common/setting/system.py:917 +#: common/setting/system.py:926 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "當收到所有行項目時,自動將採購訂單標記為完成" -#: common/setting/system.py:924 +#: common/setting/system.py:933 msgid "Enable password forgot" msgstr "忘記啓用密碼" -#: common/setting/system.py:925 +#: common/setting/system.py:934 msgid "Enable password forgot function on the login pages" msgstr "在登錄頁面上啓用忘記密碼功能" -#: common/setting/system.py:930 +#: common/setting/system.py:939 msgid "Enable registration" msgstr "啓用註冊" -#: common/setting/system.py:931 +#: common/setting/system.py:940 msgid "Enable self-registration for users on the login pages" msgstr "在登錄頁面為用户啓用自行註冊功能" -#: common/setting/system.py:936 +#: common/setting/system.py:945 msgid "Enable SSO" msgstr "啓用單點登錄" -#: common/setting/system.py:937 +#: common/setting/system.py:946 msgid "Enable SSO on the login pages" msgstr "在登錄界面啓用單點登錄" -#: common/setting/system.py:942 +#: common/setting/system.py:951 msgid "Enable SSO registration" msgstr "啓用單點登錄註冊" -#: common/setting/system.py:944 +#: common/setting/system.py:953 msgid "Enable self-registration via SSO for users on the login pages" msgstr "允許登錄頁面上的用户通過 SSO 進行自我註冊" -#: common/setting/system.py:950 +#: common/setting/system.py:959 msgid "Enable SSO group sync" msgstr "啓用單點登錄羣組同步" -#: common/setting/system.py:952 +#: common/setting/system.py:961 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "啓用庫存管理系統組和由身份提供者提供的組的同步功能" -#: common/setting/system.py:958 +#: common/setting/system.py:967 msgid "SSO group key" msgstr "單點登錄系統組密鑰" -#: common/setting/system.py:959 +#: common/setting/system.py:968 msgid "The name of the groups claim attribute provided by the IdP" msgstr "由身份提供者提供的組聲明屬性名稱" -#: common/setting/system.py:964 +#: common/setting/system.py:973 msgid "SSO group map" msgstr "單點登錄系統組地圖" -#: common/setting/system.py:966 +#: common/setting/system.py:975 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "從單點登錄系統組組到本地庫存管理系統組的映射。如果本地組不存在,它將被創建。" -#: common/setting/system.py:972 +#: common/setting/system.py:981 msgid "Remove groups outside of SSO" msgstr "移除單點登錄系統以外的羣組" -#: common/setting/system.py:974 +#: common/setting/system.py:983 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "如果分配給用户的組不是身份提供者的後端,是否應該刪除它們。禁用此設置可能會造成安全問題" -#: common/setting/system.py:980 +#: common/setting/system.py:989 msgid "Email required" msgstr "需要郵箱地址" -#: common/setting/system.py:981 +#: common/setting/system.py:990 msgid "Require user to supply mail on signup" msgstr "要求用户在註冊時提供郵件" -#: common/setting/system.py:986 +#: common/setting/system.py:995 msgid "Auto-fill SSO users" msgstr "自動填充單點登錄系統用户" -#: common/setting/system.py:987 +#: common/setting/system.py:996 msgid "Automatically fill out user-details from SSO account-data" msgstr "自動使用單點登錄系統賬户的數據填寫用户詳細信息" -#: common/setting/system.py:992 +#: common/setting/system.py:1001 msgid "Mail twice" msgstr "發兩次郵件" -#: common/setting/system.py:993 +#: common/setting/system.py:1002 msgid "On signup ask users twice for their mail" msgstr "註冊時詢問用户他們的電子郵件兩次" -#: common/setting/system.py:998 +#: common/setting/system.py:1007 msgid "Password twice" msgstr "兩次輸入密碼" -#: common/setting/system.py:999 +#: common/setting/system.py:1008 msgid "On signup ask users twice for their password" msgstr "當註冊時請用户輸入密碼兩次" -#: common/setting/system.py:1004 +#: common/setting/system.py:1013 msgid "Allowed domains" msgstr "域名白名單" -#: common/setting/system.py:1006 +#: common/setting/system.py:1015 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "限制註冊到某些域名 (逗號分隔,以 @ 開頭)" -#: common/setting/system.py:1012 +#: common/setting/system.py:1021 msgid "Group on signup" msgstr "註冊羣組" -#: common/setting/system.py:1014 +#: common/setting/system.py:1023 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "註冊時分配給新用户的組。 如果啓用了單點登錄系統羣組同步,此羣組僅在無法從 IdP 分配任何羣組的情況下才被設置。" -#: common/setting/system.py:1020 +#: common/setting/system.py:1029 msgid "Enforce MFA" msgstr "強制啓用多因素安全認證" -#: common/setting/system.py:1021 +#: common/setting/system.py:1030 msgid "Users must use multifactor security." msgstr "用户必須使用多因素安全認證。" -#: common/setting/system.py:1026 +#: common/setting/system.py:1035 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1031 +#: common/setting/system.py:1040 msgid "Check plugins on startup" msgstr "啓動時檢查插件" -#: common/setting/system.py:1033 +#: common/setting/system.py:1042 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "啓動時檢查全部插件是否已安裝 - 在容器環境中啓用" -#: common/setting/system.py:1040 +#: common/setting/system.py:1049 msgid "Check for plugin updates" msgstr "檢查插件更新" -#: common/setting/system.py:1041 +#: common/setting/system.py:1050 msgid "Enable periodic checks for updates to installed plugins" msgstr "啓用定期檢查已安裝插件的更新" -#: common/setting/system.py:1047 +#: common/setting/system.py:1056 msgid "Enable URL integration" msgstr "啓用統一資源定位符集成" -#: common/setting/system.py:1048 +#: common/setting/system.py:1057 msgid "Enable plugins to add URL routes" msgstr "啓用插件以添加統一資源定位符路由" -#: common/setting/system.py:1054 +#: common/setting/system.py:1063 msgid "Enable navigation integration" msgstr "啓用導航集成" -#: common/setting/system.py:1055 +#: common/setting/system.py:1064 msgid "Enable plugins to integrate into navigation" msgstr "啓用插件以集成到導航中" -#: common/setting/system.py:1061 +#: common/setting/system.py:1070 msgid "Enable app integration" msgstr "啓用應用集成" -#: common/setting/system.py:1062 +#: common/setting/system.py:1071 msgid "Enable plugins to add apps" msgstr "啓用插件添加應用" -#: common/setting/system.py:1068 +#: common/setting/system.py:1077 msgid "Enable schedule integration" msgstr "啓用調度集成" -#: common/setting/system.py:1069 +#: common/setting/system.py:1078 msgid "Enable plugins to run scheduled tasks" msgstr "啓用插件來運行預定任務" -#: common/setting/system.py:1075 +#: common/setting/system.py:1084 msgid "Enable event integration" msgstr "啓用事件集成" -#: common/setting/system.py:1076 +#: common/setting/system.py:1085 msgid "Enable plugins to respond to internal events" msgstr "啓用插件響應內部事件" -#: common/setting/system.py:1082 +#: common/setting/system.py:1091 msgid "Enable interface integration" msgstr "啓用界面集成" -#: common/setting/system.py:1083 +#: common/setting/system.py:1092 msgid "Enable plugins to integrate into the user interface" msgstr "啓用插件集成到用户界面" -#: common/setting/system.py:1089 +#: common/setting/system.py:1098 msgid "Enable mail integration" msgstr "啟用郵件整合" -#: common/setting/system.py:1090 +#: common/setting/system.py:1099 msgid "Enable plugins to process outgoing/incoming mails" msgstr "允許模組處理寄出/接收郵件" -#: common/setting/system.py:1096 +#: common/setting/system.py:1105 msgid "Enable project codes" msgstr "啟用專案代碼" -#: common/setting/system.py:1097 +#: common/setting/system.py:1106 msgid "Enable project codes for tracking projects" msgstr "啟用專案代碼以追蹤專案" -#: common/setting/system.py:1102 +#: common/setting/system.py:1111 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1113 msgid "Enable functionality for recording historical stock levels and value" msgstr "啟用記錄庫存數量及價值歷史的功能" -#: common/setting/system.py:1110 +#: common/setting/system.py:1119 msgid "Exclude External Locations" msgstr "排除外部地點" -#: common/setting/system.py:1112 +#: common/setting/system.py:1121 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1127 msgid "Automatic Stocktake Period" msgstr "自動盤點週期" -#: common/setting/system.py:1119 +#: common/setting/system.py:1128 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1134 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1127 +#: common/setting/system.py:1136 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1142 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1135 +#: common/setting/system.py:1144 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1142 +#: common/setting/system.py:1151 msgid "Delete Old Stock Tracking Entries" -msgstr "" +msgstr "刪除舊庫存的追蹤紀錄" -#: common/setting/system.py:1144 +#: common/setting/system.py:1153 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1150 +#: common/setting/system.py:1159 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1152 +#: common/setting/system.py:1161 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1159 +#: common/setting/system.py:1168 msgid "Display Users full names" msgstr "顯示用户全名" -#: common/setting/system.py:1160 +#: common/setting/system.py:1169 msgid "Display Users full names instead of usernames" msgstr "顯示用户全名而不是用户名" -#: common/setting/system.py:1165 +#: common/setting/system.py:1174 msgid "Display User Profiles" msgstr "顯示使用者個人檔案" -#: common/setting/system.py:1166 +#: common/setting/system.py:1175 msgid "Display Users Profiles on their profile page" msgstr "在個人頁面顯示使用者檔案資訊" -#: common/setting/system.py:1171 +#: common/setting/system.py:1180 msgid "Enable Test Station Data" msgstr "啓用測試站數據" -#: common/setting/system.py:1172 +#: common/setting/system.py:1181 msgid "Enable test station data collection for test results" msgstr "啓用測試站數據收集以獲取測試結果" -#: common/setting/system.py:1177 +#: common/setting/system.py:1186 msgid "Enable Machine Ping" -msgstr "" +msgstr "啟用設備 Ping" -#: common/setting/system.py:1179 +#: common/setting/system.py:1188 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3965,346 +3972,346 @@ msgstr "零件已激活" msgid "Manufacturer is Active" msgstr "製造商處於活動狀態" -#: company/api.py:250 +#: company/api.py:251 msgid "Supplier Part is Active" msgstr "供應商零件處於激活狀態" -#: company/api.py:252 +#: company/api.py:253 msgid "Primary Supplier Part" msgstr "" -#: company/api.py:256 +#: company/api.py:257 msgid "Internal Part is Active" msgstr "內部零件已激活" -#: company/api.py:261 +#: company/api.py:262 msgid "Supplier is Active" msgstr "供應商已激活" -#: company/api.py:273 company/models.py:530 company/serializers.py:455 -#: part/serializers.py:478 +#: company/api.py:274 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "製造商" -#: company/api.py:280 company/models.py:123 company/models.py:399 -#: stock/api.py:900 +#: company/api.py:281 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "公司" -#: company/api.py:290 +#: company/api.py:291 msgid "Has Stock" msgstr "有庫存" -#: company/models.py:124 +#: company/models.py:125 msgid "Companies" msgstr "公司" -#: company/models.py:152 +#: company/models.py:153 msgid "Company description" msgstr "公司簡介" -#: company/models.py:153 +#: company/models.py:154 msgid "Description of the company" msgstr "公司簡介" -#: company/models.py:159 +#: company/models.py:160 msgid "Website" msgstr "網站" -#: company/models.py:160 +#: company/models.py:161 msgid "Company website URL" msgstr "公司網站" -#: company/models.py:166 +#: company/models.py:167 msgid "Phone number" msgstr "電話號碼" -#: company/models.py:168 +#: company/models.py:169 msgid "Contact phone number" msgstr "聯繫電話" -#: company/models.py:175 +#: company/models.py:176 msgid "Contact email address" msgstr "聯繫人電子郵箱地址" -#: company/models.py:180 company/models.py:306 order/models.py:516 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "聯繫人" -#: company/models.py:182 +#: company/models.py:183 msgid "Point of contact" msgstr "聯絡點" -#: company/models.py:188 +#: company/models.py:189 msgid "Link to external company information" msgstr "外部公司信息鏈接" -#: company/models.py:193 +#: company/models.py:194 msgid "Is this company active?" msgstr "這家公司是否激活?" -#: company/models.py:198 +#: company/models.py:199 msgid "Is customer" msgstr "是客户" -#: company/models.py:199 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "你是否向該公司出售商品?" -#: company/models.py:204 +#: company/models.py:205 msgid "Is supplier" msgstr "是否為供應商" -#: company/models.py:205 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "你從這家公司買東西嗎?" -#: company/models.py:210 +#: company/models.py:211 msgid "Is manufacturer" msgstr "是製造商嗎" -#: company/models.py:211 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "這家公司生產零件嗎?" -#: company/models.py:219 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "此公司使用的默認貨幣" -#: company/models.py:226 +#: company/models.py:227 msgid "Tax ID" msgstr "稅籍編號" -#: company/models.py:227 +#: company/models.py:228 msgid "Company Tax ID" msgstr "公司稅籍編號" -#: company/models.py:345 order/models.py:526 order/models.py:2290 +#: company/models.py:350 order/models.py:535 order/models.py:2327 msgid "Address" msgstr "地址" -#: company/models.py:346 +#: company/models.py:351 msgid "Addresses" msgstr "地址" -#: company/models.py:400 +#: company/models.py:405 msgid "Select company" msgstr "選擇公司" -#: company/models.py:405 +#: company/models.py:410 msgid "Address title" msgstr "地址標題" -#: company/models.py:406 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "描述地址條目的標題" -#: company/models.py:412 +#: company/models.py:417 msgid "Primary address" msgstr "主要地址" -#: company/models.py:413 +#: company/models.py:418 msgid "Set as primary address" msgstr "設置主要地址" -#: company/models.py:418 +#: company/models.py:423 msgid "Line 1" msgstr "第1行" -#: company/models.py:419 +#: company/models.py:424 msgid "Address line 1" msgstr "地址行1" -#: company/models.py:425 +#: company/models.py:430 msgid "Line 2" msgstr "第2行" -#: company/models.py:426 +#: company/models.py:431 msgid "Address line 2" msgstr "地址行2" -#: company/models.py:432 company/models.py:433 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "郵政編碼" -#: company/models.py:439 +#: company/models.py:444 msgid "City/Region" msgstr "城市/地區" -#: company/models.py:440 +#: company/models.py:445 msgid "Postal code city/region" msgstr "郵政編碼城市/地區" -#: company/models.py:446 +#: company/models.py:451 msgid "State/Province" msgstr "省/市/自治區" -#: company/models.py:447 +#: company/models.py:452 msgid "State or province" msgstr "省、自治區或直轄市" -#: company/models.py:453 +#: company/models.py:458 msgid "Country" msgstr "國家/地區" -#: company/models.py:454 +#: company/models.py:459 msgid "Address country" msgstr "地址所在國家" -#: company/models.py:460 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "快遞運單" -#: company/models.py:461 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "運輸快遞注意事項" -#: company/models.py:467 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "內部裝運通知單" -#: company/models.py:468 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "內部使用的裝運通知單" -#: company/models.py:475 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "鏈接地址信息 (外部)" -#: company/models.py:502 company/models.py:797 company/serializers.py:475 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "製造商零件" -#: company/models.py:519 company/models.py:759 stock/models.py:1030 -#: stock/serializers.py:409 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:418 msgid "Base Part" msgstr "基礎零件" -#: company/models.py:521 company/models.py:761 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "選擇零件" -#: company/models.py:531 +#: company/models.py:536 msgid "Select manufacturer" msgstr "選擇製造商" -#: company/models.py:537 company/serializers.py:486 order/serializers.py:692 -#: part/serializers.py:488 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:705 +#: part/serializers.py:498 msgid "MPN" msgstr "製造商零件編號" -#: company/models.py:538 stock/serializers.py:564 +#: company/models.py:543 stock/serializers.py:575 msgid "Manufacturer Part Number" msgstr "製造商零件編號" -#: company/models.py:545 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "外部製造商零件鏈接的URL" -#: company/models.py:554 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "製造商零件説明" -#: company/models.py:686 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "包裝單位必須與基礎零件單位兼容" -#: company/models.py:693 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "包裝單位必須大於零" -#: company/models.py:707 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "鏈接的製造商零件必須引用相同的基礎零件" -#: company/models.py:769 company/serializers.py:443 company/serializers.py:470 -#: order/models.py:642 part/serializers.py:462 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "供應商" -#: company/models.py:770 +#: company/models.py:775 msgid "Select supplier" msgstr "選擇供應商" -#: company/models.py:776 part/serializers.py:473 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "供應商庫存管理單位" -#: company/models.py:782 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "此供應商零件是否處於活動狀態?" -#: company/models.py:787 +#: company/models.py:792 msgid "Primary" msgstr "" -#: company/models.py:788 +#: company/models.py:793 msgid "Is this the primary supplier part for the linked Part?" msgstr "" -#: company/models.py:798 +#: company/models.py:803 msgid "Select manufacturer part" msgstr "選擇製造商零件" -#: company/models.py:805 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "外部供應商零件鏈接的URL" -#: company/models.py:814 +#: company/models.py:819 msgid "Supplier part description" msgstr "供應商零件説明" -#: company/models.py:830 part/models.py:2301 +#: company/models.py:835 part/models.py:2295 msgid "base cost" msgstr "基本費用" -#: company/models.py:831 part/models.py:2302 +#: company/models.py:836 part/models.py:2296 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低費用(例如庫存費)" -#: company/models.py:838 order/serializers.py:833 stock/models.py:1061 -#: stock/serializers.py:1637 +#: company/models.py:843 order/serializers.py:846 stock/models.py:1063 +#: stock/serializers.py:1648 msgid "Packaging" msgstr "打包" -#: company/models.py:839 +#: company/models.py:844 msgid "Part packaging" msgstr "零件打包" -#: company/models.py:844 +#: company/models.py:849 msgid "Pack Quantity" msgstr "包裝數量" -#: company/models.py:846 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "單包供應的總數量。為單個項目留空。" -#: company/models.py:865 part/models.py:2308 +#: company/models.py:870 part/models.py:2302 msgid "multiple" msgstr "多個" -#: company/models.py:866 +#: company/models.py:871 msgid "Order multiple" msgstr "訂購多個" -#: company/models.py:878 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "供應商提供的數量" -#: company/models.py:884 +#: company/models.py:889 msgid "Availability Updated" msgstr "可用性已更新" -#: company/models.py:885 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "上次更新可用性數據的日期" -#: company/models.py:1013 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "供應商批發價" @@ -4316,7 +4323,7 @@ msgstr "此供應商使用的默認貨幣" msgid "Company Name" msgstr "公司名稱" -#: company/serializers.py:407 part/serializers.py:827 stock/serializers.py:430 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:441 msgid "In Stock" msgstr "有庫存" @@ -4452,7 +4459,7 @@ msgstr "目標模型中不存在字段" msgid "Selected field is read-only" msgstr "所選字段為只讀" -#: importer/models.py:487 importer/models.py:558 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "導入會話" @@ -4464,31 +4471,31 @@ msgstr "字段" msgid "Column" msgstr "列" -#: importer/models.py:562 +#: importer/models.py:568 msgid "Row Index" msgstr "行索引" -#: importer/models.py:565 +#: importer/models.py:571 msgid "Original row data" msgstr "原始行數據" -#: importer/models.py:570 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "錯誤" -#: importer/models.py:572 part/serializers.py:1114 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "有效" -#: importer/models.py:833 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "更新既有紀錄需要提供 ID。" -#: importer/models.py:840 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:846 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4588,7 +4595,7 @@ msgstr "每個標籤要打印的份數" msgid "Connected" msgstr "已連接" -#: machine/machine_types/label_printer.py:232 order/api.py:1805 +#: machine/machine_types/label_printer.py:232 order/api.py:1846 msgid "Unknown" msgstr "未知" @@ -4706,115 +4713,127 @@ msgstr "" #: machine/serializers.py:35 msgid "Type of the property" -msgstr "" +msgstr "屬性類別" #: machine/serializers.py:40 msgid "Max Progress" -msgstr "" +msgstr "最大進度" #: machine/serializers.py:41 msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:128 msgid "Order Reference" msgstr "訂單參考" -#: order/api.py:158 order/api.py:1206 +#: order/api.py:156 order/api.py:1218 msgid "Outstanding" msgstr "未完成" -#: order/api.py:174 +#: order/api.py:172 msgid "Has Project Code" msgstr "有項目編碼" -#: order/api.py:188 order/models.py:491 +#: order/api.py:186 order/models.py:493 msgid "Created By" msgstr "創建人" -#: order/api.py:192 +#: order/api.py:190 msgid "Created Before" msgstr "建立時間早於" -#: order/api.py:196 +#: order/api.py:194 msgid "Created After" msgstr "建立時間晚於" -#: order/api.py:200 +#: order/api.py:198 msgid "Has Start Date" msgstr "具有開始日期" -#: order/api.py:208 +#: order/api.py:206 msgid "Start Date Before" msgstr "開始日期早於" -#: order/api.py:212 +#: order/api.py:210 msgid "Start Date After" msgstr "開始日期晚於" -#: order/api.py:216 +#: order/api.py:214 msgid "Has Target Date" msgstr "具有目標日期" -#: order/api.py:224 +#: order/api.py:222 msgid "Target Date Before" msgstr "目標日期早於" -#: order/api.py:228 +#: order/api.py:226 msgid "Target Date After" msgstr "目標日期晚於" -#: order/api.py:279 +#: order/api.py:230 +msgid "Updated Before" +msgstr "更新之前" + +#: order/api.py:234 +msgid "Updated After" +msgstr "更新之後" + +#: order/api.py:285 msgid "Has Pricing" msgstr "有定價" -#: order/api.py:332 order/api.py:816 order/api.py:1489 +#: order/api.py:338 order/api.py:825 order/api.py:1527 msgid "Completed Before" msgstr "完成時間早於" -#: order/api.py:336 order/api.py:820 order/api.py:1493 +#: order/api.py:342 order/api.py:829 order/api.py:1531 msgid "Completed After" msgstr "完成時間晚於" -#: order/api.py:342 order/api.py:346 +#: order/api.py:348 order/api.py:352 msgid "External Build Order" msgstr "外部生產工單" -#: order/api.py:530 order/api.py:915 order/api.py:1169 order/models.py:1925 -#: order/models.py:2051 order/models.py:2101 order/models.py:2281 -#: order/models.py:2479 order/models.py:3006 order/models.py:3072 +#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1959 +#: order/models.py:2085 order/models.py:2137 order/models.py:2318 +#: order/models.py:2507 order/models.py:3036 order/models.py:3102 msgid "Order" msgstr "訂單" -#: order/api.py:534 order/api.py:983 +#: order/api.py:541 order/api.py:993 msgid "Order Complete" msgstr "訂單完成" -#: order/api.py:566 order/api.py:570 order/serializers.py:703 +#: order/api.py:573 order/api.py:577 order/serializers.py:716 msgid "Internal Part" msgstr "內部零件" -#: order/api.py:588 +#: order/api.py:595 msgid "Order Pending" msgstr "訂單待定" -#: order/api.py:968 +#: order/api.py:978 msgid "Completed" msgstr "已完成" -#: order/api.py:1222 +#: order/api.py:1234 msgid "Has Shipment" msgstr "已出貨" -#: order/api.py:1799 order/models.py:555 order/models.py:1926 -#: order/models.py:2052 +#: order/api.py:1442 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1840 order/models.py:564 order/models.py:1960 +#: order/models.py:2086 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "採購訂單" -#: order/api.py:1801 order/models.py:1254 order/models.py:2102 -#: order/models.py:2282 order/models.py:2480 +#: order/api.py:1842 order/models.py:1275 order/models.py:2138 +#: order/models.py:2319 order/models.py:2508 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4822,8 +4841,8 @@ msgstr "採購訂單" msgid "Sales Order" msgstr "銷售訂單" -#: order/api.py:1803 order/models.py:2651 order/models.py:3007 -#: order/models.py:3073 +#: order/api.py:1844 order/models.py:2679 order/models.py:3037 +#: order/models.py:3103 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4839,11 +4858,11 @@ msgstr "總價格" msgid "Total price for this order" msgstr "此訂單的總價" -#: order/models.py:96 order/serializers.py:67 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "訂單貨幣" -#: order/models.py:99 order/serializers.py:68 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "此訂單的貨幣 (留空以使用公司默認值)" @@ -4851,718 +4870,742 @@ msgstr "此訂單的貨幣 (留空以使用公司默認值)" msgid "This order is locked and cannot be modified" msgstr "此訂單已鎖定,無法修改" -#: order/models.py:378 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "聯繫人與所選公司不匹配" -#: order/models.py:385 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "開始日期必須早於目標日期" -#: order/models.py:392 +#: order/models.py:394 msgid "Address does not match selected company" -msgstr "" +msgstr "地址不符合選定的公司" -#: order/models.py:446 +#: order/models.py:448 msgid "Order description (optional)" msgstr "訂單描述 (可選)" -#: order/models.py:455 order/models.py:1809 +#: order/models.py:457 order/models.py:1841 msgid "Select project code for this order" msgstr "為此訂單選擇項目編碼" -#: order/models.py:461 order/models.py:1790 order/models.py:2346 +#: order/models.py:463 order/models.py:1822 order/models.py:2383 msgid "Link to external page" msgstr "鏈接到外部頁面" -#: order/models.py:468 +#: order/models.py:470 msgid "Start date" msgstr "開始日期" -#: order/models.py:469 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "此訂單的預定開始日期" -#: order/models.py:475 order/models.py:1797 order/serializers.py:289 +#: order/models.py:477 order/models.py:1829 order/serializers.py:295 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "預計日期" -#: order/models.py:477 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "訂單交付的預期日期。訂單將在此日期後過期。" -#: order/models.py:497 +#: order/models.py:499 msgid "Issue Date" msgstr "簽發日期" -#: order/models.py:498 +#: order/models.py:500 msgid "Date order was issued" msgstr "訂單發出日期" #: order/models.py:506 +msgid "Updated At" +msgstr "更新於" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "負責此訂單的用户或組" -#: order/models.py:517 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "此訂單的聯繫人" -#: order/models.py:527 +#: order/models.py:536 msgid "Company address for this order" msgstr "此訂單的公司地址" -#: order/models.py:618 order/models.py:1315 +#: order/models.py:629 order/models.py:1338 msgid "Order reference" msgstr "訂單參考" -#: order/models.py:627 order/models.py:1339 order/models.py:2739 -#: stock/serializers.py:551 stock/serializers.py:992 users/models.py:542 +#: order/models.py:638 order/models.py:1362 order/models.py:2769 +#: stock/serializers.py:562 stock/serializers.py:1003 users/models.py:542 msgid "Status" msgstr "狀態" -#: order/models.py:628 +#: order/models.py:639 msgid "Purchase order status" msgstr "採購訂單狀態" -#: order/models.py:643 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "訂購物品的公司" -#: order/models.py:654 +#: order/models.py:665 msgid "Supplier Reference" msgstr "供應商參考" -#: order/models.py:655 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "供應商訂單參考代碼" -#: order/models.py:664 +#: order/models.py:675 msgid "received by" msgstr "接收人" -#: order/models.py:671 order/models.py:2754 +#: order/models.py:682 order/models.py:2784 msgid "Date order was completed" msgstr "訂單完成日期" -#: order/models.py:680 order/models.py:1984 +#: order/models.py:691 order/models.py:2018 msgid "Destination" msgstr "目的地" -#: order/models.py:681 order/models.py:1988 +#: order/models.py:692 order/models.py:2022 msgid "Destination for received items" msgstr "收到項目的存放目的地" -#: order/models.py:727 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "零件供應商必須與採購訂單供應商匹配" -#: order/models.py:997 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "行項目與採購訂單不匹配" -#: order/models.py:1000 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "行項目缺少關聯零件" -#: order/models.py:1014 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "數量必須是正數" -#: order/models.py:1326 order/models.py:2726 stock/models.py:1083 -#: stock/models.py:1084 stock/serializers.py:1353 +#: order/models.py:1059 +msgid "Serial numbers cannot be assigned to virtual parts" +msgstr "" + +#: order/models.py:1349 order/models.py:2756 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1364 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "客户" -#: order/models.py:1327 +#: order/models.py:1350 msgid "Company to which the items are being sold" msgstr "出售物品的公司" -#: order/models.py:1340 +#: order/models.py:1363 msgid "Sales order status" msgstr "銷售訂單狀態" -#: order/models.py:1351 order/models.py:2746 +#: order/models.py:1374 order/models.py:2776 msgid "Customer Reference " msgstr "客户參考 " -#: order/models.py:1352 order/models.py:2747 +#: order/models.py:1375 order/models.py:2777 msgid "Customer order reference code" msgstr "客户訂單參考代碼" -#: order/models.py:1356 order/models.py:2298 +#: order/models.py:1379 order/models.py:2335 msgid "Shipment Date" msgstr "發貨日期" -#: order/models.py:1365 +#: order/models.py:1388 msgid "shipped by" msgstr "發貨人" -#: order/models.py:1416 +#: order/models.py:1439 msgid "Order is already complete" msgstr "訂單已完成" -#: order/models.py:1419 +#: order/models.py:1442 msgid "Order is already cancelled" msgstr "訂單已取消" -#: order/models.py:1423 +#: order/models.py:1446 msgid "Only an open order can be marked as complete" msgstr "只有未結訂單才能標記為已完成" -#: order/models.py:1427 +#: order/models.py:1450 msgid "Order cannot be completed as there are incomplete shipments" msgstr "由於發貨不完整,訂單無法完成" -#: order/models.py:1432 +#: order/models.py:1455 msgid "Order cannot be completed as there are incomplete allocations" msgstr "訂單無法完成,因為仍有未完成的分配" -#: order/models.py:1441 +#: order/models.py:1464 msgid "Order cannot be completed as there are incomplete line items" msgstr "訂單無法完成,因為行項目不完整" -#: order/models.py:1736 order/models.py:1752 +#: order/models.py:1759 order/models.py:1775 msgid "The order is locked and cannot be modified" msgstr "此訂單已鎖定,無法修改" -#: order/models.py:1760 +#: order/models.py:1783 msgid "Item quantity" msgstr "項目數量" -#: order/models.py:1777 +#: order/models.py:1801 +msgid "Line Number" +msgstr "" + +#: order/models.py:1802 +msgid "Line number for this item (optional)" +msgstr "" + +#: order/models.py:1809 msgid "Line item reference" msgstr "行項目參考" -#: order/models.py:1784 +#: order/models.py:1816 msgid "Line item notes" msgstr "行項目註釋" -#: order/models.py:1799 +#: order/models.py:1831 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "此行項目的目標日期 (留空以使用訂單中的目標日期)" -#: order/models.py:1829 +#: order/models.py:1861 msgid "Line item description (optional)" msgstr "行項目描述 (可選)" -#: order/models.py:1836 +#: order/models.py:1868 msgid "Additional context for this line" msgstr "此行的附加上下文" -#: order/models.py:1846 +#: order/models.py:1878 msgid "Unit price" msgstr "單位價格" -#: order/models.py:1865 +#: order/models.py:1897 msgid "Purchase Order Line Item" msgstr "採購訂單行項目" -#: order/models.py:1892 +#: order/models.py:1926 msgid "Supplier part must match supplier" msgstr "供應商零件必須與供應商匹配" -#: order/models.py:1897 +#: order/models.py:1931 msgid "Build order must be marked as external" msgstr "生產工單必須標記為外部" -#: order/models.py:1904 +#: order/models.py:1938 msgid "Build orders can only be linked to assembly parts" msgstr "生產工單只能連結到組裝零件" -#: order/models.py:1910 +#: order/models.py:1944 msgid "Build order part must match line item part" msgstr "生產工單的零件必須與行項目的零件一致" -#: order/models.py:1945 +#: order/models.py:1979 msgid "Supplier part" msgstr "供應商零件" -#: order/models.py:1952 +#: order/models.py:1986 msgid "Received" msgstr "已接收" -#: order/models.py:1953 +#: order/models.py:1987 msgid "Number of items received" msgstr "收到的物品數量" -#: order/models.py:1961 stock/models.py:1206 stock/serializers.py:641 +#: order/models.py:1995 stock/models.py:1208 stock/serializers.py:652 msgid "Purchase Price" msgstr "採購價格" -#: order/models.py:1962 +#: order/models.py:1996 msgid "Unit purchase price" msgstr "每單位的採購價格" -#: order/models.py:1978 +#: order/models.py:2012 msgid "External Build Order to be fulfilled by this line item" msgstr "由此行項目履行的外部生產工單" -#: order/models.py:2040 +#: order/models.py:2074 msgid "Purchase Order Extra Line" msgstr "採購訂單附加行" -#: order/models.py:2069 +#: order/models.py:2103 msgid "Sales Order Line Item" msgstr "銷售訂單行項目" -#: order/models.py:2094 +#: order/models.py:2130 msgid "Only salable parts can be assigned to a sales order" msgstr "只有可銷售的零件才能分配給銷售訂單" -#: order/models.py:2120 +#: order/models.py:2156 msgid "Sale Price" msgstr "售出價格" -#: order/models.py:2121 +#: order/models.py:2157 msgid "Unit sale price" msgstr "單位售出價格" -#: order/models.py:2130 order/status_codes.py:50 +#: order/models.py:2166 order/status_codes.py:50 msgid "Shipped" msgstr "已配送" -#: order/models.py:2131 +#: order/models.py:2167 msgid "Shipped quantity" msgstr "發貨數量" -#: order/models.py:2242 +#: order/models.py:2279 msgid "Sales Order Shipment" msgstr "銷售訂單發貨" -#: order/models.py:2255 +#: order/models.py:2292 msgid "Shipment address must match the customer" -msgstr "" +msgstr "配送地址必須跟客戶相符" -#: order/models.py:2291 +#: order/models.py:2328 msgid "Shipping address for this shipment" -msgstr "" +msgstr "配送的採購地址" -#: order/models.py:2299 +#: order/models.py:2336 msgid "Date of shipment" msgstr "發貨日期" -#: order/models.py:2305 +#: order/models.py:2342 msgid "Delivery Date" msgstr "送達日期" -#: order/models.py:2306 +#: order/models.py:2343 msgid "Date of delivery of shipment" msgstr "裝運交貨日期" -#: order/models.py:2314 +#: order/models.py:2351 msgid "Checked By" msgstr "審核人" -#: order/models.py:2315 +#: order/models.py:2352 msgid "User who checked this shipment" msgstr "檢查此裝運的用户" -#: order/models.py:2322 order/models.py:2576 order/serializers.py:1707 -#: order/serializers.py:1831 +#: order/models.py:2359 order/models.py:2604 order/serializers.py:1698 +#: order/serializers.py:1822 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" -#: order/models.py:2323 +#: order/models.py:2360 msgid "Shipment number" msgstr "配送單號" -#: order/models.py:2331 +#: order/models.py:2368 msgid "Tracking Number" msgstr "跟蹤單號" -#: order/models.py:2332 +#: order/models.py:2369 msgid "Shipment tracking information" msgstr "配送跟蹤信息" -#: order/models.py:2339 +#: order/models.py:2376 msgid "Invoice Number" msgstr "發票編號" -#: order/models.py:2340 +#: order/models.py:2377 msgid "Reference number for associated invoice" msgstr "相關發票的參考號" -#: order/models.py:2379 +#: order/models.py:2416 msgid "Shipment has already been sent" msgstr "貨物已發出" -#: order/models.py:2382 +#: order/models.py:2419 msgid "Shipment has no allocated stock items" msgstr "發貨沒有分配庫存項目" -#: order/models.py:2389 +#: order/models.py:2426 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2468 +#: order/models.py:2496 msgid "Sales Order Extra Line" msgstr "銷售訂單加行" -#: order/models.py:2497 +#: order/models.py:2525 msgid "Sales Order Allocation" msgstr "銷售訂單分配" -#: order/models.py:2520 order/models.py:2522 +#: order/models.py:2548 order/models.py:2550 msgid "Stock item has not been assigned" msgstr "庫存項目尚未分配" -#: order/models.py:2529 +#: order/models.py:2557 msgid "Cannot allocate stock item to a line with a different part" msgstr "無法將庫存項目分配給具有不同零件的行" -#: order/models.py:2532 +#: order/models.py:2560 msgid "Cannot allocate stock to a line without a part" msgstr "無法將庫存分配給沒有零件的生產線" -#: order/models.py:2535 +#: order/models.py:2563 msgid "Allocation quantity cannot exceed stock quantity" msgstr "分配數量不能超過庫存數量" -#: order/models.py:2551 +#: order/models.py:2579 msgid "Allocation quantity must be greater than zero" msgstr "分配的數量必須大於零" -#: order/models.py:2554 order/serializers.py:1577 +#: order/models.py:2582 order/serializers.py:1568 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化庫存項目的數量必須為1" -#: order/models.py:2557 +#: order/models.py:2585 msgid "Sales order does not match shipment" msgstr "銷售訂單與發貨不匹配" -#: order/models.py:2558 plugin/base/barcodes/api.py:643 +#: order/models.py:2586 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "發貨與銷售訂單不匹配" -#: order/models.py:2566 +#: order/models.py:2594 msgid "Line" msgstr "行" -#: order/models.py:2577 +#: order/models.py:2605 msgid "Sales order shipment reference" msgstr "銷售訂單發貨參考" -#: order/models.py:2590 order/models.py:3014 +#: order/models.py:2618 order/models.py:3044 msgid "Item" msgstr "項目" -#: order/models.py:2591 +#: order/models.py:2619 msgid "Select stock item to allocate" msgstr "選擇要分配的庫存項目" -#: order/models.py:2600 +#: order/models.py:2628 msgid "Enter stock allocation quantity" msgstr "輸入庫存分配數量" -#: order/models.py:2715 +#: order/models.py:2745 msgid "Return Order reference" msgstr "退貨訂單參考" -#: order/models.py:2727 +#: order/models.py:2757 msgid "Company from which items are being returned" msgstr "退回物品的公司" -#: order/models.py:2740 +#: order/models.py:2770 msgid "Return order status" msgstr "退貨訂單狀態" -#: order/models.py:2972 +#: order/models.py:3002 msgid "Return Order Line Item" msgstr "退貨訂單行項目" -#: order/models.py:2985 +#: order/models.py:3015 msgid "Stock item must be specified" msgstr "必須指定庫存項目" -#: order/models.py:2989 +#: order/models.py:3019 msgid "Return quantity exceeds stock quantity" msgstr "退回數量超過庫存數量" -#: order/models.py:2994 +#: order/models.py:3024 msgid "Return quantity must be greater than zero" msgstr "退回數量必須大於零" -#: order/models.py:2999 +#: order/models.py:3029 msgid "Invalid quantity for serialized stock item" msgstr "序列化庫存項目的數量無效" -#: order/models.py:3015 +#: order/models.py:3045 msgid "Select item to return from customer" msgstr "選擇要從客户處退回的商品" -#: order/models.py:3030 +#: order/models.py:3060 msgid "Received Date" msgstr "接收日期" -#: order/models.py:3031 +#: order/models.py:3061 msgid "The date this return item was received" msgstr "" -#: order/models.py:3043 +#: order/models.py:3073 msgid "Outcome" msgstr "結果" -#: order/models.py:3044 +#: order/models.py:3074 msgid "Outcome for this line item" msgstr "該行項目的結果" -#: order/models.py:3051 +#: order/models.py:3081 msgid "Cost associated with return or repair for this line item" msgstr "與此行項目的退貨或維修相關的成本" -#: order/models.py:3061 +#: order/models.py:3091 msgid "Return Order Extra Line" msgstr "退貨訂單附加行" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "Order ID" msgstr "訂單ID" -#: order/serializers.py:81 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "要複製的訂單ID" -#: order/serializers.py:87 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "複製行" -#: order/serializers.py:88 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "從原始訂單複製行項目" -#: order/serializers.py:94 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "複製額外行" -#: order/serializers.py:95 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "從原始訂單複製額外的行項目" -#: order/serializers.py:110 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "複製參數" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "行項目" -#: order/serializers.py:115 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "已完成行項目" -#: order/serializers.py:171 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "複製訂單" -#: order/serializers.py:172 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "指定複製此訂單的選項" -#: order/serializers.py:250 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "訂單ID不正確" -#: order/serializers.py:419 +#: order/serializers.py:432 msgid "Supplier Name" msgstr "供應商名稱" -#: order/serializers.py:464 +#: order/serializers.py:477 msgid "Order cannot be cancelled" msgstr "訂單不能取消" -#: order/serializers.py:479 order/serializers.py:1598 +#: order/serializers.py:492 order/serializers.py:1589 msgid "Allow order to be closed with incomplete line items" msgstr "允許關閉行項目不完整的訂單" -#: order/serializers.py:489 order/serializers.py:1608 +#: order/serializers.py:502 order/serializers.py:1599 msgid "Order has incomplete line items" msgstr "訂單中的行項目不完整" -#: order/serializers.py:609 +#: order/serializers.py:622 msgid "Order is not open" msgstr "訂單未打開" -#: order/serializers.py:638 +#: order/serializers.py:651 msgid "Auto Pricing" msgstr "自動定價" -#: order/serializers.py:640 +#: order/serializers.py:653 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根據供應商零件數據自動計算採購價格" -#: order/serializers.py:654 +#: order/serializers.py:667 msgid "Purchase price currency" msgstr "購買價格貨幣" -#: order/serializers.py:676 +#: order/serializers.py:689 msgid "Merge Items" msgstr "合併項目" -#: order/serializers.py:678 +#: order/serializers.py:691 msgid "Merge items with the same part, destination and target date into one line item" msgstr "將具有相同零件、目的地和目標日期的項目合併到一個行項目中" -#: order/serializers.py:685 part/serializers.py:472 +#: order/serializers.py:698 part/serializers.py:482 msgid "SKU" msgstr "庫存量單位" -#: order/serializers.py:699 part/models.py:1157 part/serializers.py:338 +#: order/serializers.py:712 part/models.py:1151 part/serializers.py:348 msgid "Internal Part Number" msgstr "內部零件編號" -#: order/serializers.py:707 +#: order/serializers.py:720 msgid "Internal Part Name" msgstr "內部零件名稱" -#: order/serializers.py:723 +#: order/serializers.py:736 msgid "Supplier part must be specified" msgstr "必須指定供應商零件" -#: order/serializers.py:726 +#: order/serializers.py:739 msgid "Purchase order must be specified" msgstr "必須指定採購訂單" -#: order/serializers.py:734 +#: order/serializers.py:747 msgid "Supplier must match purchase order" msgstr "供應商必須匹配採購訂單" -#: order/serializers.py:735 +#: order/serializers.py:748 msgid "Purchase order must match supplier" msgstr "採購訂單必須與供應商匹配" -#: order/serializers.py:783 order/serializers.py:1678 +#: order/serializers.py:796 order/serializers.py:1669 msgid "Line Item" msgstr "行項目" -#: order/serializers.py:792 order/serializers.py:932 order/serializers.py:2040 +#: order/serializers.py:805 order/serializers.py:945 order/serializers.py:2032 msgid "Select destination location for received items" msgstr "為收到的物品選擇目的地位置" -#: order/serializers.py:808 +#: order/serializers.py:821 msgid "Enter batch code for incoming stock items" msgstr "輸入入庫項目的批號" -#: order/serializers.py:815 stock/models.py:1165 +#: order/serializers.py:828 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:816 +#: order/serializers.py:829 msgid "Enter expiry date for incoming stock items" msgstr "輸入入庫庫存項目的到期日" -#: order/serializers.py:824 +#: order/serializers.py:837 msgid "Enter serial numbers for incoming stock items" msgstr "輸入入庫庫存項目的序列號" -#: order/serializers.py:834 +#: order/serializers.py:847 msgid "Override packaging information for incoming stock items" msgstr "覆蓋傳入庫存項目的包裝資料" -#: order/serializers.py:842 order/serializers.py:2045 +#: order/serializers.py:855 order/serializers.py:2037 msgid "Additional note for incoming stock items" msgstr "傳入庫存項目的附加説明" -#: order/serializers.py:849 +#: order/serializers.py:862 msgid "Barcode" msgstr "條形碼" -#: order/serializers.py:850 +#: order/serializers.py:863 msgid "Scanned barcode" msgstr "掃描條形碼" -#: order/serializers.py:866 +#: order/serializers.py:879 msgid "Barcode is already in use" msgstr "條形碼已被使用" -#: order/serializers.py:949 order/serializers.py:2064 +#: order/serializers.py:962 order/serializers.py:2056 msgid "Line items must be provided" msgstr "必須提供行項目" -#: order/serializers.py:968 +#: order/serializers.py:981 msgid "Destination location must be specified" msgstr "必須指定目標位置" -#: order/serializers.py:975 +#: order/serializers.py:988 msgid "Supplied barcode values must be unique" msgstr "提供的條形碼值必須是唯一的" -#: order/serializers.py:1095 +#: order/serializers.py:1109 msgid "Shipments" msgstr "配送紀錄" -#: order/serializers.py:1099 +#: order/serializers.py:1113 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1103 +#: order/serializers.py:1117 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1282 +#: order/serializers.py:1296 msgid "Sale price currency" msgstr "售出價格貨幣" -#: order/serializers.py:1325 +#: order/serializers.py:1343 msgid "Allocated Items" msgstr "已分配項目" -#: order/serializers.py:1480 +#: order/serializers.py:1500 msgid "No shipment details provided" msgstr "未提供裝運詳細信息" -#: order/serializers.py:1541 order/serializers.py:1687 +#: order/serializers.py:1532 order/serializers.py:1678 msgid "Line item is not associated with this order" msgstr "行項目與此訂單不關聯" -#: order/serializers.py:1560 +#: order/serializers.py:1551 msgid "Quantity must be positive" msgstr "數量必須為正" -#: order/serializers.py:1697 +#: order/serializers.py:1688 msgid "Enter serial numbers to allocate" msgstr "輸入要分配的序列號" -#: order/serializers.py:1719 order/serializers.py:1839 +#: order/serializers.py:1710 order/serializers.py:1830 msgid "Shipment has already been shipped" msgstr "貨物已發出" -#: order/serializers.py:1722 order/serializers.py:1842 +#: order/serializers.py:1713 order/serializers.py:1833 msgid "Shipment is not associated with this order" msgstr "發貨與此訂單無關" -#: order/serializers.py:1777 +#: order/serializers.py:1768 msgid "No match found for the following serial numbers" msgstr "未找到以下序列號的匹配項" -#: order/serializers.py:1784 +#: order/serializers.py:1775 msgid "The following serial numbers are unavailable" msgstr "以下序列號不可用" -#: order/serializers.py:2006 +#: order/serializers.py:1998 msgid "Return order line item" msgstr "退貨訂單行項目" -#: order/serializers.py:2016 +#: order/serializers.py:2008 msgid "Line item does not match return order" msgstr "行項目與退貨訂單不匹配" -#: order/serializers.py:2019 +#: order/serializers.py:2011 msgid "Line item has already been received" msgstr "行項目已收到" -#: order/serializers.py:2056 +#: order/serializers.py:2048 msgid "Items can only be received against orders which are in progress" msgstr "只能根據正在進行的訂單接收物品" -#: order/serializers.py:2128 +#: order/serializers.py:2120 msgid "Quantity to return" msgstr "退回數量" -#: order/serializers.py:2145 +#: order/serializers.py:2137 msgid "Line price currency" msgstr "行價格貨幣" @@ -5598,146 +5641,146 @@ msgstr "退款" msgid "Reject" msgstr "拒絕" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "逾期採購訂單" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "採購訂單 {po} 已逾期" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "逾期銷售訂單" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "銷售訂單 {so} 已逾期" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "逾期退貨訂單" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "退貨訂單 {ro} 已逾期" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "已加星標" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "按星標類別篩選" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "深度" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "按類別深度篩選" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "頂級" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "按頂級類別篩選" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "級聯" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "在篩選結果中包含子類別" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "父類" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "按父類別篩選" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "排除指定類別下的子類別" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "有結果" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "為變體" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "是修訂版本" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "有修訂版本" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "物料清單合規" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1308 +#: part/api.py:1280 msgid "Assembly part is active" msgstr "" -#: part/api.py:1312 +#: part/api.py:1284 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1316 +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "裝配部份是可測試的" -#: part/api.py:1321 +#: part/api.py:1293 msgid "Component part is active" msgstr "" -#: part/api.py:1325 +#: part/api.py:1297 msgid "Component part is trackable" msgstr "" -#: part/api.py:1329 +#: part/api.py:1301 msgid "Component part is testable" msgstr "組件部份是可測試的" -#: part/api.py:1333 +#: part/api.py:1305 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1337 +#: part/api.py:1309 msgid "Component part is virtual" msgstr "" -#: part/api.py:1341 +#: part/api.py:1313 msgid "Has available stock" msgstr "" -#: part/api.py:1398 +#: part/api.py:1370 msgid "Uses" msgstr "使用" @@ -5750,7 +5793,7 @@ msgstr "零件類別" msgid "Part Categories" msgstr "零件類別" -#: part/models.py:111 part/models.py:1193 +#: part/models.py:111 part/models.py:1187 msgid "Default Location" msgstr "默認位置" @@ -5778,7 +5821,7 @@ msgstr "此類別零件的默認關鍵字" msgid "Icon" msgstr "圖標" -#: part/models.py:137 part/serializers.py:148 part/serializers.py:167 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 #: stock/models.py:187 msgid "Icon (optional)" msgstr "圖標(可選)" @@ -5799,7 +5842,7 @@ msgstr "默認值" msgid "Default Parameter Value" msgstr "默認參數值" -#: part/models.py:528 part/serializers.py:119 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "零件" @@ -5843,981 +5886,978 @@ msgid "Part cannot be a revision of itself" msgstr "零件不能是對自身的修訂" #: part/models.py:783 -msgid "Cannot make a revision of a part which is already a revision" -msgstr "無法對已經是修訂版本的零件進行修訂" +msgid "Revision code must be specified for a part marked as a revision" +msgstr "" -#: part/models.py:790 -msgid "Revision code must be specified" -msgstr "必須指定修訂代碼" - -#: part/models.py:797 +#: part/models.py:791 msgid "Revisions are only allowed for assembly parts" msgstr "修訂僅對裝配零件允許" -#: part/models.py:804 +#: part/models.py:798 msgid "Cannot make a revision of a template part" msgstr "無法對模版零件進行修訂" -#: part/models.py:810 +#: part/models.py:804 msgid "Parent part must point to the same template" msgstr "上級零件必須指向相同的模版" -#: part/models.py:907 +#: part/models.py:901 msgid "Stock item with this serial number already exists" msgstr "該序列號庫存項己存在" -#: part/models.py:1037 +#: part/models.py:1031 msgid "Duplicate IPN not allowed in part settings" msgstr "在零件設置中不允許重複的內部零件號" -#: part/models.py:1050 +#: part/models.py:1044 msgid "Duplicate part revision already exists." msgstr "重複的零件修訂版本已經存在。" -#: part/models.py:1060 +#: part/models.py:1054 msgid "Part with this Name, IPN and Revision already exists." msgstr "有這個名字,內部零件號,和修訂版本的零件已經存在" -#: part/models.py:1075 +#: part/models.py:1069 msgid "Parts cannot be assigned to structural part categories!" msgstr "零件不能分配到結構性零件類別!" -#: part/models.py:1107 +#: part/models.py:1101 msgid "Part name" msgstr "零件名稱" -#: part/models.py:1112 +#: part/models.py:1106 msgid "Is Template" msgstr "是模板" -#: part/models.py:1113 +#: part/models.py:1107 msgid "Is this part a template part?" msgstr "這個零件是一個模版零件嗎?" -#: part/models.py:1123 +#: part/models.py:1117 msgid "Is this part a variant of another part?" msgstr "這個零件是另一零件的變體嗎?" -#: part/models.py:1124 +#: part/models.py:1118 msgid "Variant Of" msgstr "變體" -#: part/models.py:1131 +#: part/models.py:1125 msgid "Part description (optional)" msgstr "零件描述(可選)" -#: part/models.py:1138 +#: part/models.py:1132 msgid "Keywords" msgstr "關鍵詞" -#: part/models.py:1139 +#: part/models.py:1133 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索結果可見性的零件關鍵字" -#: part/models.py:1149 +#: part/models.py:1143 msgid "Part category" msgstr "零件類別" -#: part/models.py:1156 part/serializers.py:801 +#: part/models.py:1150 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "內部零件號 IPN" -#: part/models.py:1164 +#: part/models.py:1158 msgid "Part revision or version number" msgstr "零件修訂版本或版本號" -#: part/models.py:1165 report/models.py:228 +#: part/models.py:1159 report/models.py:228 msgid "Revision" msgstr "版本" -#: part/models.py:1174 +#: part/models.py:1168 msgid "Is this part a revision of another part?" msgstr "這零件是另一零件的修訂版本嗎?" -#: part/models.py:1175 +#: part/models.py:1169 msgid "Revision Of" msgstr "修訂版本" -#: part/models.py:1191 +#: part/models.py:1185 msgid "Where is this item normally stored?" msgstr "該物品通常存放在哪裏?" -#: part/models.py:1228 +#: part/models.py:1222 msgid "Default Expiry" msgstr "默認到期" -#: part/models.py:1229 +#: part/models.py:1223 msgid "Expiry time (in days) for stock items of this part" msgstr "此零件庫存項的過期時間 (天)" -#: part/models.py:1237 part/serializers.py:871 +#: part/models.py:1231 part/serializers.py:889 msgid "Minimum Stock" msgstr "最低庫存" -#: part/models.py:1238 +#: part/models.py:1232 msgid "Minimum allowed stock level" msgstr "允許的最小庫存量" -#: part/models.py:1247 +#: part/models.py:1241 msgid "Units of measure for this part" msgstr "此零件的計量單位" -#: part/models.py:1254 +#: part/models.py:1248 msgid "Can this part be built from other parts?" msgstr "這個零件可由其他零件加工而成嗎?" -#: part/models.py:1260 +#: part/models.py:1254 msgid "Can this part be used to build other parts?" msgstr "這個零件可用於創建其他零件嗎?" -#: part/models.py:1266 +#: part/models.py:1260 msgid "Does this part have tracking for unique items?" msgstr "此零件是否有唯一物品的追蹤功能" -#: part/models.py:1272 +#: part/models.py:1266 msgid "Can this part have test results recorded against it?" msgstr "這一部分能否記錄到測試結果?" -#: part/models.py:1278 +#: part/models.py:1272 msgid "Can this part be purchased from external suppliers?" msgstr "這個零件可從外部供應商購買嗎?" -#: part/models.py:1284 +#: part/models.py:1278 msgid "Can this part be sold to customers?" msgstr "此零件可以銷售給客户嗎?" -#: part/models.py:1288 +#: part/models.py:1282 msgid "Is this part active?" msgstr "這個零件是否已激活?" -#: part/models.py:1294 +#: part/models.py:1288 msgid "Locked parts cannot be edited" msgstr "無法編輯鎖定的零件" -#: part/models.py:1300 +#: part/models.py:1294 msgid "Is this a virtual part, such as a software product or license?" msgstr "這是一個虛擬零件,例如一個軟件產品或許可證嗎?" -#: part/models.py:1305 +#: part/models.py:1299 msgid "BOM Validated" msgstr "BOM 已驗證" -#: part/models.py:1306 +#: part/models.py:1300 msgid "Is the BOM for this part valid?" msgstr "此零件的 BOM 是否已通過驗證?" -#: part/models.py:1312 +#: part/models.py:1306 msgid "BOM checksum" msgstr "物料清單校驗和" -#: part/models.py:1313 +#: part/models.py:1307 msgid "Stored BOM checksum" msgstr "保存的物料清單校驗和" -#: part/models.py:1321 +#: part/models.py:1315 msgid "BOM checked by" msgstr "物料清單檢查人" -#: part/models.py:1326 +#: part/models.py:1320 msgid "BOM checked date" msgstr "物料清單檢查日期" -#: part/models.py:1342 +#: part/models.py:1336 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1352 +#: part/models.py:1346 msgid "Owner responsible for this part" msgstr "此零件的負責人" -#: part/models.py:2309 +#: part/models.py:2303 msgid "Sell multiple" msgstr "出售多個" -#: part/models.py:3313 +#: part/models.py:3308 msgid "Currency used to cache pricing calculations" msgstr "用於緩存定價計算的貨幣" -#: part/models.py:3329 +#: part/models.py:3324 msgid "Minimum BOM Cost" msgstr "最低物料清單成本" -#: part/models.py:3330 +#: part/models.py:3325 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3336 +#: part/models.py:3331 msgid "Maximum BOM Cost" msgstr "物料清單的最高成本" -#: part/models.py:3337 +#: part/models.py:3332 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3343 +#: part/models.py:3338 msgid "Minimum Purchase Cost" msgstr "最低購買成本" -#: part/models.py:3344 +#: part/models.py:3339 msgid "Minimum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3350 +#: part/models.py:3345 msgid "Maximum Purchase Cost" msgstr "最大購買成本" -#: part/models.py:3351 +#: part/models.py:3346 msgid "Maximum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3357 +#: part/models.py:3352 msgid "Minimum Internal Price" msgstr "最低內部價格" -#: part/models.py:3358 +#: part/models.py:3353 msgid "Minimum cost based on internal price breaks" msgstr "基於內部批發價的最低成本" -#: part/models.py:3364 +#: part/models.py:3359 msgid "Maximum Internal Price" msgstr "最大內部價格" -#: part/models.py:3365 +#: part/models.py:3360 msgid "Maximum cost based on internal price breaks" msgstr "基於內部批發價的最高成本" -#: part/models.py:3371 +#: part/models.py:3366 msgid "Minimum Supplier Price" msgstr "供應商最低價格" -#: part/models.py:3372 +#: part/models.py:3367 msgid "Minimum price of part from external suppliers" msgstr "外部供應商零件的最低價格" -#: part/models.py:3378 +#: part/models.py:3373 msgid "Maximum Supplier Price" msgstr "供應商最高價格" -#: part/models.py:3379 +#: part/models.py:3374 msgid "Maximum price of part from external suppliers" msgstr "來自外部供應商的商零件的最高價格" -#: part/models.py:3385 +#: part/models.py:3380 msgid "Minimum Variant Cost" msgstr "最小變體成本" -#: part/models.py:3386 +#: part/models.py:3381 msgid "Calculated minimum cost of variant parts" msgstr "計算出的變體零件的最低成本" -#: part/models.py:3392 +#: part/models.py:3387 msgid "Maximum Variant Cost" msgstr "最大變體成本" -#: part/models.py:3393 +#: part/models.py:3388 msgid "Calculated maximum cost of variant parts" msgstr "計算出的變體零件的最大成本" -#: part/models.py:3399 part/models.py:3413 +#: part/models.py:3394 part/models.py:3408 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3400 +#: part/models.py:3395 msgid "Override minimum cost" msgstr "覆蓋最低成本" -#: part/models.py:3406 part/models.py:3420 +#: part/models.py:3401 part/models.py:3415 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3407 +#: part/models.py:3402 msgid "Override maximum cost" msgstr "覆蓋最大成本" -#: part/models.py:3414 +#: part/models.py:3409 msgid "Calculated overall minimum cost" msgstr "計算總最低成本" -#: part/models.py:3421 +#: part/models.py:3416 msgid "Calculated overall maximum cost" msgstr "計算總最大成本" -#: part/models.py:3427 +#: part/models.py:3422 msgid "Minimum Sale Price" msgstr "最低售出價格" -#: part/models.py:3428 +#: part/models.py:3423 msgid "Minimum sale price based on price breaks" msgstr "基於批發價的最低售出價格" -#: part/models.py:3434 +#: part/models.py:3429 msgid "Maximum Sale Price" msgstr "最高售出價格" -#: part/models.py:3435 +#: part/models.py:3430 msgid "Maximum sale price based on price breaks" msgstr "基於批發價的最大售出價格" -#: part/models.py:3441 +#: part/models.py:3436 msgid "Minimum Sale Cost" msgstr "最低銷售成本" -#: part/models.py:3442 +#: part/models.py:3437 msgid "Minimum historical sale price" msgstr "歷史最低售出價格" -#: part/models.py:3448 +#: part/models.py:3443 msgid "Maximum Sale Cost" msgstr "最高銷售成本" -#: part/models.py:3449 +#: part/models.py:3444 msgid "Maximum historical sale price" msgstr "歷史最高售出價格" -#: part/models.py:3467 +#: part/models.py:3462 msgid "Part for stocktake" msgstr "用於盤點的零件" -#: part/models.py:3472 +#: part/models.py:3467 msgid "Item Count" msgstr "物品數量" -#: part/models.py:3473 +#: part/models.py:3468 msgid "Number of individual stock entries at time of stocktake" msgstr "盤點時的個別庫存條目數" -#: part/models.py:3481 +#: part/models.py:3476 msgid "Total available stock at time of stocktake" msgstr "盤點時可用庫存總額" -#: part/models.py:3485 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3480 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3105 msgid "Date" msgstr "日期" -#: part/models.py:3486 +#: part/models.py:3481 msgid "Date stocktake was performed" msgstr "進行盤點的日期" -#: part/models.py:3493 +#: part/models.py:3488 msgid "Minimum Stock Cost" msgstr "最低庫存成本" -#: part/models.py:3494 +#: part/models.py:3489 msgid "Estimated minimum cost of stock on hand" msgstr "現有存庫存最低成本估算" -#: part/models.py:3500 +#: part/models.py:3495 msgid "Maximum Stock Cost" msgstr "最高庫存成本" -#: part/models.py:3501 +#: part/models.py:3496 msgid "Estimated maximum cost of stock on hand" msgstr "目前庫存最高成本估算" -#: part/models.py:3511 +#: part/models.py:3506 msgid "Part Sale Price Break" msgstr "零件售出價格折扣" -#: part/models.py:3625 +#: part/models.py:3620 msgid "Part Test Template" msgstr "零件測試模板" -#: part/models.py:3651 +#: part/models.py:3646 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名稱無效 - 必須包含至少一個字母或者數字" -#: part/models.py:3683 +#: part/models.py:3678 msgid "Test templates can only be created for testable parts" msgstr "測試模板只能為可拆分的部件創建" -#: part/models.py:3697 +#: part/models.py:3692 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主鍵的測試模板" -#: part/models.py:3714 +#: part/models.py:3709 msgid "Test Name" msgstr "測試名" -#: part/models.py:3715 +#: part/models.py:3710 msgid "Enter a name for the test" msgstr "輸入測試的名稱" -#: part/models.py:3721 +#: part/models.py:3716 msgid "Test Key" msgstr "測試主鍵" -#: part/models.py:3722 +#: part/models.py:3717 msgid "Simplified key for the test" msgstr "簡化測試主鍵" -#: part/models.py:3729 +#: part/models.py:3724 msgid "Test Description" msgstr "測試説明" -#: part/models.py:3730 +#: part/models.py:3725 msgid "Enter description for this test" msgstr "輸入測試的描述" -#: part/models.py:3734 +#: part/models.py:3729 msgid "Is this test enabled?" msgstr "此測試是否已啓用?" -#: part/models.py:3739 +#: part/models.py:3734 msgid "Required" msgstr "必須的" -#: part/models.py:3740 +#: part/models.py:3735 msgid "Is this test required to pass?" msgstr "需要此測試才能通過嗎?" -#: part/models.py:3745 +#: part/models.py:3740 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3746 +#: part/models.py:3741 msgid "Does this test require a value when adding a test result?" msgstr "添加測試結果時是否需要一個值?" -#: part/models.py:3751 +#: part/models.py:3746 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3753 +#: part/models.py:3748 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加測試結果時是否需要文件附件?" -#: part/models.py:3760 +#: part/models.py:3755 msgid "Valid choices for this test (comma-separated)" msgstr "此測試的有效選擇 (逗號分隔)" -#: part/models.py:3954 +#: part/models.py:3949 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清單項目不能被修改 - 裝配已鎖定" -#: part/models.py:3961 +#: part/models.py:3956 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清單項目不能修改 - 變體裝配已鎖定" -#: part/models.py:3971 +#: part/models.py:3966 msgid "Select parent part" msgstr "選擇父零件" -#: part/models.py:3981 +#: part/models.py:3976 msgid "Sub part" msgstr "子零件" -#: part/models.py:3982 +#: part/models.py:3977 msgid "Select part to be used in BOM" msgstr "選擇要用於物料清單的零件" -#: part/models.py:3993 +#: part/models.py:3988 msgid "BOM quantity for this BOM item" msgstr "此物料清單項目的數量" -#: part/models.py:3999 +#: part/models.py:3994 msgid "This BOM item is optional" msgstr "此物料清單項目是可選的" -#: part/models.py:4005 +#: part/models.py:4000 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "這個物料清單項目是耗材 (它沒有在生產訂單中被追蹤)" -#: part/models.py:4013 +#: part/models.py:4008 msgid "Setup Quantity" msgstr "建置額外數量" -#: part/models.py:4014 +#: part/models.py:4009 msgid "Extra required quantity for a build, to account for setup losses" msgstr "為彌補建置 / 開工損耗所需的額外數量" -#: part/models.py:4022 +#: part/models.py:4017 msgid "Attrition" msgstr "損耗率" -#: part/models.py:4024 +#: part/models.py:4019 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "製造預估損耗(百分比 0–100)" -#: part/models.py:4035 +#: part/models.py:4030 msgid "Rounding Multiple" msgstr "進位倍數" -#: part/models.py:4037 +#: part/models.py:4032 msgid "Round up required production quantity to nearest multiple of this value" msgstr "將所需生產數量向上取整到此數值的整數倍" -#: part/models.py:4045 +#: part/models.py:4040 msgid "BOM item reference" msgstr "物料清單項目引用" -#: part/models.py:4053 +#: part/models.py:4048 msgid "BOM item notes" msgstr "物料清單項目註釋" -#: part/models.py:4059 +#: part/models.py:4054 msgid "Checksum" msgstr "校驗和" -#: part/models.py:4060 +#: part/models.py:4055 msgid "BOM line checksum" msgstr "物料清單行校驗和" -#: part/models.py:4065 +#: part/models.py:4060 msgid "Validated" msgstr "已驗證" -#: part/models.py:4066 +#: part/models.py:4061 msgid "This BOM item has been validated" msgstr "此物料清單項目已驗證" -#: part/models.py:4071 +#: part/models.py:4066 msgid "Gets inherited" msgstr "獲取繼承的" -#: part/models.py:4072 +#: part/models.py:4067 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清單項目是由物料清單繼承的變體零件" -#: part/models.py:4078 +#: part/models.py:4073 msgid "Stock items for variant parts can be used for this BOM item" msgstr "變體零件的庫存項可以用於此物料清單項目" -#: part/models.py:4185 stock/models.py:930 +#: part/models.py:4180 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "可追蹤零件的數量必須是整數" -#: part/models.py:4195 part/models.py:4197 +#: part/models.py:4190 part/models.py:4192 msgid "Sub part must be specified" msgstr "必須指定子零件" -#: part/models.py:4348 +#: part/models.py:4343 msgid "BOM Item Substitute" msgstr "物料清單項目替代品" -#: part/models.py:4369 +#: part/models.py:4364 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能與主零件相同" -#: part/models.py:4382 +#: part/models.py:4377 msgid "Parent BOM item" msgstr "上級物料清單項目" -#: part/models.py:4390 +#: part/models.py:4385 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4406 +#: part/models.py:4401 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4414 +#: part/models.py:4409 msgid "Part 2" msgstr "零件2" -#: part/models.py:4415 +#: part/models.py:4410 msgid "Select Related Part" msgstr "選擇相關的零件" -#: part/models.py:4422 +#: part/models.py:4417 msgid "Note for this relationship" msgstr "此關係的備註" -#: part/models.py:4441 +#: part/models.py:4436 msgid "Part relationship cannot be created between a part and itself" msgstr "零件關係不能在零件和自身之間創建" -#: part/models.py:4446 +#: part/models.py:4441 msgid "Duplicate relationship already exists" msgstr "複製關係已經存在" -#: part/serializers.py:114 +#: part/serializers.py:115 msgid "Parent Category" msgstr "上級類別" -#: part/serializers.py:115 +#: part/serializers.py:116 msgid "Parent part category" msgstr "上級零件類別" -#: part/serializers.py:123 part/serializers.py:164 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "子類別" -#: part/serializers.py:203 +#: part/serializers.py:213 msgid "Results" msgstr "結果" -#: part/serializers.py:204 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "根據該模板記錄的結果數量" -#: part/serializers.py:235 part/serializers.py:253 stock/serializers.py:647 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:658 msgid "Purchase currency of this stock item" msgstr "購買此庫存項的貨幣" -#: part/serializers.py:280 +#: part/serializers.py:290 msgid "File is not an image" msgstr "檔案不是圖片" -#: part/serializers.py:383 +#: part/serializers.py:393 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:384 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "選擇要複製的原始零件" -#: part/serializers.py:389 +#: part/serializers.py:399 msgid "Copy Image" msgstr "複製圖片" -#: part/serializers.py:390 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "從原零件複製圖片" -#: part/serializers.py:396 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "複製物料清單" -#: part/serializers.py:397 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "從原始零件複製材料清單" -#: part/serializers.py:403 -msgid "Copy Parameters" -msgstr "複製參數" - -#: part/serializers.py:404 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "從原始零件複製參數數據" -#: part/serializers.py:410 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "複製備註" -#: part/serializers.py:411 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "從原始零件複製備註" -#: part/serializers.py:417 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "複製測試模板" -#: part/serializers.py:418 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "從原始零件複製測試模板" -#: part/serializers.py:436 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "初始化庫存數量" -#: part/serializers.py:438 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始庫存數量。如果數量為零,則不添加任何庫存。" -#: part/serializers.py:445 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "初始化庫存地點" -#: part/serializers.py:446 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的庫存地點" -#: part/serializers.py:463 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "選擇供應商(或為空以跳過)" -#: part/serializers.py:479 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "選擇製造商(或為空)" -#: part/serializers.py:489 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "製造商零件號" -#: part/serializers.py:496 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "所選公司不是一個有效的供應商" -#: part/serializers.py:505 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "所選公司不是一個有效的製造商" -#: part/serializers.py:516 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "與此製造商零件編號 (MPN) 的相匹配的製造商零件已存在" -#: part/serializers.py:523 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "匹配此庫存單位 (SKU) 的供應商零件已存在" -#: part/serializers.py:786 +#: part/serializers.py:804 msgid "Category Name" msgstr "類別名稱" -#: part/serializers.py:815 +#: part/serializers.py:833 msgid "Building" msgstr "正在生產" -#: part/serializers.py:816 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "此零件目前生產中數量" -#: part/serializers.py:823 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件排程待製造未完成數量" -#: part/serializers.py:843 stock/serializers.py:1023 stock/serializers.py:1206 +#: part/serializers.py:861 stock/serializers.py:1034 stock/serializers.py:1217 #: users/ruleset.py:30 msgid "Stock Items" msgstr "庫存項" -#: part/serializers.py:847 +#: part/serializers.py:865 msgid "Revisions" msgstr "修訂" -#: part/serializers.py:851 part/serializers.py:1143 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "庫存總量" -#: part/serializers.py:859 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "未分配的庫存" -#: part/serializers.py:867 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "變體庫存" -#: part/serializers.py:923 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "重複零件" -#: part/serializers.py:924 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "從另一個零件複製初始數據" -#: part/serializers.py:930 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "初始庫存" -#: part/serializers.py:931 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "創建具有初始庫存數量的零件" -#: part/serializers.py:937 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "供應商信息" -#: part/serializers.py:938 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供應商信息" -#: part/serializers.py:947 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "複製類別參數" -#: part/serializers.py:948 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "從選擇的零件複製參數模版" -#: part/serializers.py:953 +#: part/serializers.py:971 msgid "Existing Image" msgstr "現有的圖片" -#: part/serializers.py:954 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "現有零件圖片的文件名" -#: part/serializers.py:971 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "圖片不存在" -#: part/serializers.py:1115 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "驗證整個物料清單" -#: part/serializers.py:1149 part/serializers.py:1729 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "可以創建" -#: part/serializers.py:1166 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "生產工單需求數" -#: part/serializers.py:1171 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "已分配至生產工單" -#: part/serializers.py:1178 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "銷售訂單需求數" -#: part/serializers.py:1182 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "已分配至銷售訂單" -#: part/serializers.py:1242 +#: part/serializers.py:1260 msgid "Part IPN" msgstr "" -#: part/serializers.py:1249 +#: part/serializers.py:1267 msgid "Part Description" msgstr "" -#: part/serializers.py:1288 +#: part/serializers.py:1306 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1298 +#: part/serializers.py:1316 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1308 +#: part/serializers.py:1326 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1315 +#: part/serializers.py:1333 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1316 +#: part/serializers.py:1334 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1323 +#: part/serializers.py:1341 msgid "Generate Report" -msgstr "" +msgstr "產製報表" -#: part/serializers.py:1324 +#: part/serializers.py:1342 msgid "Generate a stocktake report for the selected parts" -msgstr "" +msgstr "產製選定零件的庫存報表" -#: part/serializers.py:1427 +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "最低價格" -#: part/serializers.py:1428 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "覆蓋已計算的最低價格值" -#: part/serializers.py:1435 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "最低價格貨幣" -#: part/serializers.py:1442 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "最高價格" -#: part/serializers.py:1443 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "覆蓋已計算的最高價格值" -#: part/serializers.py:1450 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "最高價格貨幣" -#: part/serializers.py:1479 +#: part/serializers.py:1497 msgid "Update" msgstr "更新" -#: part/serializers.py:1480 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "更新這個零件的價格" -#: part/serializers.py:1503 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "無法將所提供的貨幣轉換為 {default_currency}" -#: part/serializers.py:1510 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "最低價格不能高於最高價格。" -#: part/serializers.py:1513 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "最高價格不能低於最低價格" -#: part/serializers.py:1667 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "選擇父裝配" -#: part/serializers.py:1695 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "選擇零部件" -#: part/serializers.py:1897 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "選擇要複製物料清單的零件" -#: part/serializers.py:1905 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "移除現有數據" -#: part/serializers.py:1906 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "複製前刪除現有的物料清單項目" -#: part/serializers.py:1911 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "包含繼承的" -#: part/serializers.py:1912 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "包含從模板零件繼承的物料清單項目" -#: part/serializers.py:1917 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "跳過無效行" -#: part/serializers.py:1918 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "啓用此選項以跳過無效行" -#: part/serializers.py:1923 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "複製替代品零件" -#: part/serializers.py:1924 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "複製物料清單項目時複製替代品零件" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "低庫存通知" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "可用的 {part.name}庫存已經跌到設置的最低值" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "庫存即將過期通知" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "有 1 個庫存項目即將到期" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "有 {item_count} 個庫存項目即將到期" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "未設定到期日" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "已於 {abs(days_diff)} 天前到期" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "今日到期" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "尚餘 {days_until_expiry} 天" @@ -7580,64 +7620,77 @@ msgstr "為掃描 TME 條形碼提供支持" msgid "The Supplier which acts as 'TME'" msgstr "作為‘TME’的供應商" -#: plugin/installer.py:240 plugin/installer.py:320 -msgid "Only staff users can administer plugins" -msgstr "只有員工用户可以管理插件" +#: plugin/installer.py:240 plugin/installer.py:344 plugin/serializers.py:169 +#: plugin/serializers.py:275 +msgid "Only superuser accounts can administer plugins" +msgstr "" #: plugin/installer.py:243 msgid "Plugin installation is disabled" msgstr "插件安裝已禁用" -#: plugin/installer.py:280 +#: plugin/installer.py:273 +msgid "No package name or URL provided for installation" +msgstr "" + +#: plugin/installer.py:277 +msgid "Invalid characters in package name or URL" +msgstr "" + +#: plugin/installer.py:287 msgid "Installed plugin successfully" msgstr "插件安裝成功" -#: plugin/installer.py:285 +#: plugin/installer.py:292 #, python-brace-format msgid "Installed plugin into {path}" msgstr "插件安裝到 {path}" -#: plugin/installer.py:311 +#: plugin/installer.py:318 msgid "Plugin was not found in registry" msgstr "在插件倉庫中找不到插件" -#: plugin/installer.py:314 +#: plugin/installer.py:321 msgid "Plugin is not a packaged plugin" msgstr "插件不是一個打包的插件" -#: plugin/installer.py:317 +#: plugin/installer.py:324 msgid "Plugin package name not found" msgstr "找不到插件包名稱" -#: plugin/installer.py:337 +#: plugin/installer.py:327 +msgid "Only staff users can administer plugins" +msgstr "只有員工用户可以管理插件" + +#: plugin/installer.py:347 msgid "Plugin uninstalling is disabled" msgstr "插件卸載已禁用" -#: plugin/installer.py:341 +#: plugin/installer.py:351 msgid "Plugin cannot be uninstalled as it is currently active" msgstr "插件無法卸載,因為它目前處於激活狀態" -#: plugin/installer.py:347 +#: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is mandatory" msgstr "不可解除安裝此模組(屬於強制)" -#: plugin/installer.py:352 +#: plugin/installer.py:362 msgid "Plugin cannot be uninstalled as it is a sample plugin" msgstr "不可解除安裝此模組(範例模組)" -#: plugin/installer.py:357 +#: plugin/installer.py:367 msgid "Plugin cannot be uninstalled as it is a built-in plugin" msgstr "不可解除安裝此模組(內建模組)" -#: plugin/installer.py:361 +#: plugin/installer.py:371 msgid "Plugin is not installed" msgstr "模組尚未安裝" -#: plugin/installer.py:379 +#: plugin/installer.py:389 msgid "Plugin installation not found" msgstr "找不到模組安裝紀錄" -#: plugin/installer.py:395 +#: plugin/installer.py:405 msgid "Uninstalled plugin successfully" msgstr "插件卸載成功" @@ -7655,7 +7708,7 @@ msgstr "插件的鍵" #: plugin/models.py:55 msgid "Name of the plugin" -msgstr "" +msgstr "外掛名稱" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7689,21 +7742,21 @@ msgstr "軟件包插件" msgid "Plugin" msgstr "插件" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "未找到作者" -#: plugin/registry.py:781 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "插件 '{p}' 與當前 InvenTree 版本{v} 不兼容" -#: plugin/registry.py:784 +#: plugin/registry.py:789 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "插件所需最低版本 {v}" -#: plugin/registry.py:786 +#: plugin/registry.py:791 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "插件所需最高版本 {v}" @@ -7884,51 +7937,51 @@ msgstr "安裝尚未確認" msgid "Either packagename or URL must be provided" msgstr "" -#: plugin/serializers.py:188 +#: plugin/serializers.py:191 msgid "Full reload" msgstr "完全重載" -#: plugin/serializers.py:189 +#: plugin/serializers.py:192 msgid "Perform a full reload of the plugin registry" msgstr "執行插件庫的完整重載" -#: plugin/serializers.py:195 +#: plugin/serializers.py:198 msgid "Force reload" msgstr "強制重載" -#: plugin/serializers.py:197 +#: plugin/serializers.py:200 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "強制重載插件庫,即使已經加載" -#: plugin/serializers.py:204 +#: plugin/serializers.py:207 msgid "Collect plugins" msgstr "收集插件" -#: plugin/serializers.py:205 +#: plugin/serializers.py:208 msgid "Collect plugins and add them to the registry" msgstr "收集插件並添加到註冊表中" -#: plugin/serializers.py:233 +#: plugin/serializers.py:236 msgid "Activate Plugin" msgstr "激活插件" -#: plugin/serializers.py:234 +#: plugin/serializers.py:237 msgid "Activate this plugin" msgstr "激活此插件" -#: plugin/serializers.py:243 +#: plugin/serializers.py:246 msgid "Mandatory plugin cannot be deactivated" msgstr "強制模組不可停用" -#: plugin/serializers.py:261 +#: plugin/serializers.py:264 msgid "Delete configuration" msgstr "刪除配置" -#: plugin/serializers.py:262 +#: plugin/serializers.py:265 msgid "Delete the plugin configuration from the database" msgstr "從數據庫中刪除插件配置" -#: plugin/serializers.py:293 +#: plugin/serializers.py:299 msgid "The user for which this setting applies" msgstr "此設定所適用的使用者" @@ -8190,7 +8243,7 @@ msgstr "總計" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1088 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "序列號" @@ -8215,7 +8268,7 @@ msgstr "庫存項測試報告" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:630 +#: stock/serializers.py:641 msgid "Installed Items" msgstr "已安裝的項目" @@ -8248,186 +8301,198 @@ msgstr "無結果 (必填)" msgid "No result" msgstr "沒有結果" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "資產文件不存在" +#: report/templatetags/report.py:166 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:185 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:287 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:345 report/templatetags/report.py:461 msgid "Image file not found" msgstr "找不到圖片文件" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:430 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:455 msgid "part_image tag requires a Part instance" msgstr "parpart_image 標籤需要一個零件實例" -#: report/templatetags/report.py:384 +#: report/templatetags/report.py:553 msgid "company_image tag requires a Company instance" msgstr "公司_圖片標籤需要一個公司實例" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "按位置深度篩選" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "按頂級位置篩選" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "在篩選結果中包含子地點" -#: stock/api.py:344 stock/serializers.py:1202 +#: stock/api.py:343 stock/serializers.py:1213 msgid "Parent Location" msgstr "上級地點" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "按上級位置篩選" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "零件名稱(不分大小寫)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "零件名稱包含(不分大小寫)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "零件名稱(正則)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "零件 IPN(不分大小寫)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "零件 IPN 包含(不分大小寫)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "零件 IPN(正則)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "最小庫存" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "最大庫存" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "狀態代碼" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "外部地點" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "被生產工單消耗" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "已安裝於其他庫存項" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "零件樹" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "更新時間早於" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "更新時間晚於" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "盤點日期早於" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "盤點日期晚於" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "過期日期前" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "過期日期後" -#: stock/api.py:937 stock/serializers.py:635 +#: stock/api.py:936 stock/serializers.py:646 msgid "Stale" msgstr "過期" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "請先輸入數量" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "必須提供有效的零件" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "給定的供應商零件不存在" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "供應商零件有定義的包裝大小,但 use_pack_size 標誌未設置" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "不能為不可跟蹤的零件提供序列號" -#: stock/api.py:1401 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1403 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1410 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" -msgstr "" +msgstr "使用數字庫存品項 ID 做過濾" -#: stock/api.py:1431 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" -msgstr "" +msgstr "庫存品項 ID {id} 不存在" -#: stock/api.py:1508 +#: stock/api.py:1516 msgid "Include Part Variants" -msgstr "" +msgstr "包括零件變數" -#: stock/api.py:1538 +#: stock/api.py:1546 msgid "Date after" -msgstr "" +msgstr "日前之後" -#: stock/api.py:1542 +#: stock/api.py:1550 msgid "Date before" -msgstr "" +msgstr "日期之前" #: stock/models.py:73 msgid "Stock Location type" @@ -8441,7 +8506,7 @@ msgstr "庫存地點類型" msgid "Default icon for all locations that have no icon set (optional)" msgstr "為所有沒有圖標的位置設置默認圖標(可選)" -#: stock/models.py:147 stock/models.py:1050 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "庫存地點" @@ -8449,11 +8514,11 @@ msgstr "庫存地點" msgid "Stock Locations" msgstr "庫存地點" -#: stock/models.py:197 stock/models.py:1215 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "所有者" -#: stock/models.py:198 stock/models.py:1216 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "選擇所有者" @@ -8481,274 +8546,274 @@ msgstr "該位置的庫存地點類型" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "您不能將此庫存地點設置為結構性,因為某些庫存項已經位於它!" -#: stock/models.py:583 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field} 不存在" -#: stock/models.py:596 +#: stock/models.py:598 msgid "Part must be specified" msgstr "必須指定零件" -#: stock/models.py:909 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "庫存項不能存放在結構性庫存地點!" -#: stock/models.py:936 stock/serializers.py:455 +#: stock/models.py:938 stock/serializers.py:466 msgid "Stock item cannot be created for virtual parts" msgstr "無法為虛擬零件創建庫存項" -#: stock/models.py:953 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "零件類型 ('{self.supplier_part.part}') 必須為 {self.part}" -#: stock/models.py:963 stock/models.py:976 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "有序列號的項目的數量必須是1" -#: stock/models.py:966 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "如果數量大於1,則不能設置序列號" -#: stock/models.py:988 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "項目不能屬於其自身" -#: stock/models.py:993 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "如果is_building=True,則項必須具有構建引用" -#: stock/models.py:1006 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "構建引用未指向同一零件對象" -#: stock/models.py:1020 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "母庫存項目" -#: stock/models.py:1032 +#: stock/models.py:1034 msgid "Base part" msgstr "基礎零件" -#: stock/models.py:1042 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "為此庫存項目選擇匹配的供應商零件" -#: stock/models.py:1054 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "這個庫存物品在哪裏?" -#: stock/models.py:1062 stock/serializers.py:1638 +#: stock/models.py:1064 stock/serializers.py:1649 msgid "Packaging this stock item is stored in" msgstr "包裝此庫存物品存儲在" -#: stock/models.py:1068 +#: stock/models.py:1070 msgid "Installed In" msgstr "安裝於" -#: stock/models.py:1073 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "此項目是否安裝在另一個項目中?" -#: stock/models.py:1092 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "此項目的序列號" -#: stock/models.py:1109 stock/serializers.py:1623 +#: stock/models.py:1111 stock/serializers.py:1634 msgid "Batch code for this stock item" msgstr "此庫存項的批號" -#: stock/models.py:1114 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "庫存數量" -#: stock/models.py:1124 +#: stock/models.py:1126 msgid "Source Build" msgstr "源代碼構建" -#: stock/models.py:1127 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "為此庫存項目構建" -#: stock/models.py:1134 +#: stock/models.py:1136 msgid "Consumed By" msgstr "消費者" -#: stock/models.py:1137 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "構建消耗此庫存項的生產訂單" -#: stock/models.py:1146 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "採購訂單來源" -#: stock/models.py:1150 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "此庫存商品的採購訂單" -#: stock/models.py:1156 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "目的地銷售訂單" -#: stock/models.py:1167 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "庫存物品的到期日。在此日期之後,庫存將被視為過期" -#: stock/models.py:1185 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "耗盡時刪除" -#: stock/models.py:1186 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "當庫存耗盡時刪除此庫存項" -#: stock/models.py:1207 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "購買時一個單位的價格" -#: stock/models.py:1238 +#: stock/models.py:1240 msgid "Converted to part" msgstr "轉換為零件" -#: stock/models.py:1440 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "數量超過可用庫存" -#: stock/models.py:1891 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "零件未設置為可跟蹤" -#: stock/models.py:1897 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "數量必須是整數" -#: stock/models.py:1905 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "數量不得超過現有庫存量 ({self.quantity})" -#: stock/models.py:1911 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "序列號需以清單提供" -#: stock/models.py:1916 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "數量不匹配序列號" -#: stock/models.py:1934 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" -msgstr "" +msgstr "無法將庫存分配到結構位置" -#: stock/models.py:2051 stock/models.py:3021 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "測試模板不存在" -#: stock/models.py:2069 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "庫存項已分配到銷售訂單" -#: stock/models.py:2073 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "庫存項已安裝在另一個項目中" -#: stock/models.py:2076 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "庫存項包含其他項目" -#: stock/models.py:2079 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "庫存項已分配給客户" -#: stock/models.py:2082 stock/models.py:2268 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "庫存項目前正在生產" -#: stock/models.py:2085 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "序列化的庫存不能合併" -#: stock/models.py:2092 stock/serializers.py:1493 +#: stock/models.py:2094 stock/serializers.py:1504 msgid "Duplicate stock items" msgstr "複製庫存項" -#: stock/models.py:2096 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "庫存項必須指相同零件" -#: stock/models.py:2104 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "庫存項必須是同一供應商的零件" -#: stock/models.py:2109 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "庫存狀態碼必須匹配" -#: stock/models.py:2409 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "庫存項不能移動,因為它沒有庫存" -#: stock/models.py:2903 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "庫存項跟蹤" -#: stock/models.py:2953 +#: stock/models.py:2955 msgid "Entry notes" msgstr "條目註釋" -#: stock/models.py:2993 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "庫存項測試結果" -#: stock/models.py:3024 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "必須為此測試提供值" -#: stock/models.py:3028 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "測試附件必須上傳" -#: stock/models.py:3033 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "此測試的值無效" -#: stock/models.py:3057 +#: stock/models.py:3059 msgid "Test result" msgstr "測試結果" -#: stock/models.py:3064 +#: stock/models.py:3066 msgid "Test output value" msgstr "測試輸出值" -#: stock/models.py:3072 stock/serializers.py:250 +#: stock/models.py:3074 stock/serializers.py:259 msgid "Test result attachment" msgstr "測驗結果附件" -#: stock/models.py:3076 +#: stock/models.py:3078 msgid "Test notes" msgstr "測試備註" -#: stock/models.py:3084 +#: stock/models.py:3086 msgid "Test station" msgstr "測試站" -#: stock/models.py:3085 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "進行測試的測試站的標識符" -#: stock/models.py:3091 +#: stock/models.py:3093 msgid "Started" msgstr "已開始" -#: stock/models.py:3092 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "測試開始的時間戳" -#: stock/models.py:3098 +#: stock/models.py:3100 msgid "Finished" msgstr "已完成" -#: stock/models.py:3099 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "測試結束的時間戳" @@ -8792,246 +8857,246 @@ msgstr "選擇要生成序列號的零件" msgid "Quantity of serial numbers to generate" msgstr "要生成的序列號的數量" -#: stock/serializers.py:236 +#: stock/serializers.py:245 msgid "Test template for this result" msgstr "此結果的測試模板" -#: stock/serializers.py:280 +#: stock/serializers.py:289 msgid "No matching test found for this part" -msgstr "" +msgstr "未找到與此零件相符的測試" -#: stock/serializers.py:284 +#: stock/serializers.py:293 msgid "Template ID or test name must be provided" msgstr "必須提供模板 ID 或測試名稱" -#: stock/serializers.py:294 +#: stock/serializers.py:303 msgid "The test finished time cannot be earlier than the test started time" msgstr "測試完成時間不能早於測試開始時間" -#: stock/serializers.py:416 +#: stock/serializers.py:427 msgid "Parent Item" msgstr "父項" -#: stock/serializers.py:417 +#: stock/serializers.py:428 msgid "Parent stock item" msgstr "父庫存項" -#: stock/serializers.py:440 +#: stock/serializers.py:451 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "添加時使用包裝尺寸:定義的數量是包裝的數量" -#: stock/serializers.py:442 +#: stock/serializers.py:453 msgid "Use pack size" msgstr "使用包裝數" -#: stock/serializers.py:449 stock/serializers.py:704 +#: stock/serializers.py:460 stock/serializers.py:715 msgid "Enter serial numbers for new items" msgstr "輸入新項目的序列號" -#: stock/serializers.py:557 +#: stock/serializers.py:568 msgid "Supplier Part Number" msgstr "供應商零件編號" -#: stock/serializers.py:627 users/models.py:187 +#: stock/serializers.py:638 users/models.py:187 msgid "Expired" msgstr "已過期" -#: stock/serializers.py:633 +#: stock/serializers.py:644 msgid "Child Items" msgstr "子項目" -#: stock/serializers.py:637 +#: stock/serializers.py:648 msgid "Tracking Items" msgstr "跟蹤項目" -#: stock/serializers.py:643 +#: stock/serializers.py:654 msgid "Purchase price of this stock item, per unit or pack" msgstr "此庫存商品的購買價格,單位或包裝" -#: stock/serializers.py:681 +#: stock/serializers.py:692 msgid "Enter number of stock items to serialize" msgstr "輸入要序列化的庫存項目數量" -#: stock/serializers.py:689 stock/serializers.py:732 stock/serializers.py:770 -#: stock/serializers.py:908 +#: stock/serializers.py:700 stock/serializers.py:743 stock/serializers.py:781 +#: stock/serializers.py:919 msgid "No stock item provided" msgstr "未提供庫存項" -#: stock/serializers.py:697 +#: stock/serializers.py:708 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "數量不得超過現有庫存量 ({q})" -#: stock/serializers.py:715 stock/serializers.py:1450 stock/serializers.py:1771 -#: stock/serializers.py:1820 +#: stock/serializers.py:726 stock/serializers.py:1461 stock/serializers.py:1782 +#: stock/serializers.py:1831 msgid "Destination stock location" msgstr "目標庫存位置" -#: stock/serializers.py:735 +#: stock/serializers.py:746 msgid "Serial numbers cannot be assigned to this part" msgstr "此零件不能分配序列號" -#: stock/serializers.py:755 +#: stock/serializers.py:766 msgid "Serial numbers already exist" msgstr "序列號已存在" -#: stock/serializers.py:805 +#: stock/serializers.py:816 msgid "Select stock item to install" msgstr "選擇要安裝的庫存項目" -#: stock/serializers.py:812 +#: stock/serializers.py:823 msgid "Quantity to Install" msgstr "安裝數量" -#: stock/serializers.py:813 +#: stock/serializers.py:824 msgid "Enter the quantity of items to install" msgstr "輸入要安裝的項目數量" -#: stock/serializers.py:818 stock/serializers.py:898 stock/serializers.py:1040 +#: stock/serializers.py:829 stock/serializers.py:909 stock/serializers.py:1051 msgid "Add transaction note (optional)" msgstr "添加交易記錄 (可選)" -#: stock/serializers.py:826 +#: stock/serializers.py:837 msgid "Quantity to install must be at least 1" msgstr "安裝數量必須至少為1" -#: stock/serializers.py:834 +#: stock/serializers.py:845 msgid "Stock item is unavailable" msgstr "庫存項不可用" -#: stock/serializers.py:845 +#: stock/serializers.py:856 msgid "Selected part is not in the Bill of Materials" msgstr "所選零件不在物料清單中" -#: stock/serializers.py:858 +#: stock/serializers.py:869 msgid "Quantity to install must not exceed available quantity" msgstr "安裝數量不得超過可用數量" -#: stock/serializers.py:893 +#: stock/serializers.py:904 msgid "Destination location for uninstalled item" msgstr "已卸載項目的目標位置" -#: stock/serializers.py:931 +#: stock/serializers.py:942 msgid "Select part to convert stock item into" msgstr "選擇要將庫存項目轉換為的零件" -#: stock/serializers.py:944 +#: stock/serializers.py:955 msgid "Selected part is not a valid option for conversion" msgstr "所選零件不是有效的轉換選項" -#: stock/serializers.py:961 +#: stock/serializers.py:972 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "無法轉換已分配供應商零件的庫存項" -#: stock/serializers.py:995 +#: stock/serializers.py:1006 msgid "Stock item status code" msgstr "庫存項狀態代碼" -#: stock/serializers.py:1024 +#: stock/serializers.py:1035 msgid "Select stock items to change status" msgstr "選擇要更改狀態的庫存項目" -#: stock/serializers.py:1030 +#: stock/serializers.py:1041 msgid "No stock items selected" msgstr "未選擇庫存商品" -#: stock/serializers.py:1137 stock/serializers.py:1208 +#: stock/serializers.py:1148 stock/serializers.py:1219 msgid "Sublocations" msgstr "轉租" -#: stock/serializers.py:1203 +#: stock/serializers.py:1214 msgid "Parent stock location" msgstr "上級庫存地點" -#: stock/serializers.py:1322 +#: stock/serializers.py:1333 msgid "Part must be salable" msgstr "零件必須可銷售" -#: stock/serializers.py:1326 +#: stock/serializers.py:1337 msgid "Item is allocated to a sales order" msgstr "物料已分配到銷售訂單" -#: stock/serializers.py:1330 +#: stock/serializers.py:1341 msgid "Item is allocated to a build order" msgstr "項目被分配到生產訂單中" -#: stock/serializers.py:1354 +#: stock/serializers.py:1365 msgid "Customer to assign stock items" msgstr "客户分配庫存項目" -#: stock/serializers.py:1360 +#: stock/serializers.py:1371 msgid "Selected company is not a customer" msgstr "所選公司不是客户" -#: stock/serializers.py:1368 +#: stock/serializers.py:1379 msgid "Stock assignment notes" msgstr "庫存分配説明" -#: stock/serializers.py:1378 stock/serializers.py:1666 +#: stock/serializers.py:1389 stock/serializers.py:1677 msgid "A list of stock items must be provided" msgstr "必須提供庫存物品清單" -#: stock/serializers.py:1457 +#: stock/serializers.py:1468 msgid "Stock merging notes" msgstr "庫存合併説明" -#: stock/serializers.py:1462 +#: stock/serializers.py:1473 msgid "Allow mismatched suppliers" msgstr "允許不匹配的供應商" -#: stock/serializers.py:1463 +#: stock/serializers.py:1474 msgid "Allow stock items with different supplier parts to be merged" msgstr "允許合併具有不同供應商零件的庫存項目" -#: stock/serializers.py:1468 +#: stock/serializers.py:1479 msgid "Allow mismatched status" msgstr "允許不匹配的狀態" -#: stock/serializers.py:1469 +#: stock/serializers.py:1480 msgid "Allow stock items with different status codes to be merged" msgstr "允許合併具有不同狀態代碼的庫存項目" -#: stock/serializers.py:1479 +#: stock/serializers.py:1490 msgid "At least two stock items must be provided" msgstr "必須提供至少兩件庫存物品" -#: stock/serializers.py:1546 +#: stock/serializers.py:1557 msgid "No Change" msgstr "無更改" -#: stock/serializers.py:1584 +#: stock/serializers.py:1595 msgid "StockItem primary key value" msgstr "庫存項主鍵值" -#: stock/serializers.py:1597 +#: stock/serializers.py:1608 msgid "Stock item is not in stock" msgstr "庫存項無庫存" -#: stock/serializers.py:1600 +#: stock/serializers.py:1611 msgid "Stock item is already in stock" msgstr "庫存項已在庫" -#: stock/serializers.py:1614 +#: stock/serializers.py:1625 msgid "Quantity must not be negative" msgstr "數量不可為負" -#: stock/serializers.py:1656 +#: stock/serializers.py:1667 msgid "Stock transaction notes" msgstr "庫存交易記錄" -#: stock/serializers.py:1826 +#: stock/serializers.py:1837 msgid "Merge into existing stock" msgstr "合併至現有庫存" -#: stock/serializers.py:1827 +#: stock/serializers.py:1838 msgid "Merge returned items into existing stock items if possible" msgstr "可行時將退回項目併入現有庫存" -#: stock/serializers.py:1870 +#: stock/serializers.py:1881 msgid "Next Serial Number" msgstr "下一個序列號" -#: stock/serializers.py:1876 +#: stock/serializers.py:1887 msgid "Previous Serial Number" msgstr "上一個序列號" @@ -9089,7 +9154,7 @@ msgstr "已手動刪除庫存" #: stock/status_codes.py:56 msgid "Serialized stock items" -msgstr "" +msgstr "序列化庫存品項" #: stock/status_codes.py:58 msgid "Returned to stock" @@ -9537,59 +9602,75 @@ msgstr "用户的姓氏" msgid "Email address of the user" msgstr "用户的電子郵件地址" -#: users/serializers.py:309 -msgid "Staff" -msgstr "職員" +#: users/serializers.py:244 +msgid "User must be authenticated" +msgstr "" -#: users/serializers.py:310 -msgid "Does this user have staff permissions" -msgstr "此用户是否擁有員工權限" +#: users/serializers.py:253 +msgid "Only a superuser can create a token for another user" +msgstr "" -#: users/serializers.py:315 +#: users/serializers.py:322 +msgid "Administrator" +msgstr "" + +#: users/serializers.py:323 +msgid "Does this user have administrative permissions" +msgstr "" + +#: users/serializers.py:328 users/serializers.py:417 msgid "Superuser" msgstr "超級用户" -#: users/serializers.py:315 +#: users/serializers.py:328 users/serializers.py:418 msgid "Is this user a superuser" msgstr "此用户是否為超級用户" -#: users/serializers.py:319 +#: users/serializers.py:332 users/serializers.py:425 msgid "Is this user account active" msgstr "此用户帳户是否已激活" -#: users/serializers.py:331 +#: users/serializers.py:344 msgid "Only a superuser can adjust this field" msgstr "僅超級使用者可調整此欄位" -#: users/serializers.py:359 +#: users/serializers.py:372 msgid "Password" msgstr "密碼" -#: users/serializers.py:360 +#: users/serializers.py:373 msgid "Password for the user" msgstr "使用者密碼" -#: users/serializers.py:366 +#: users/serializers.py:379 msgid "Override warning" msgstr "忽略警告" -#: users/serializers.py:367 +#: users/serializers.py:380 msgid "Override the warning about password rules" msgstr "忽略密碼規則警告" -#: users/serializers.py:423 +#: users/serializers.py:410 +msgid "Staff" +msgstr "" + +#: users/serializers.py:411 +msgid "Does this user have staff permissions" +msgstr "" + +#: users/serializers.py:461 msgid "You do not have permission to create users" msgstr "您沒有建立使用者的權限" -#: users/serializers.py:444 +#: users/serializers.py:482 msgid "Your account has been created." msgstr "您的帳號已經建立完成。" -#: users/serializers.py:446 +#: users/serializers.py:484 msgid "Please use the password reset function to login" msgstr "請使用重設密碼功能來登入" -#: users/serializers.py:452 +#: users/serializers.py:490 msgid "Welcome to InvenTree" msgstr "歡迎使用 InvenTree" diff --git a/src/backend/InvenTree/machine/api.py b/src/backend/InvenTree/machine/api.py index 24342cc3f9..0092622ed7 100644 --- a/src/backend/InvenTree/machine/api.py +++ b/src/backend/InvenTree/machine/api.py @@ -98,7 +98,7 @@ class MachineSettingList(APIView): all_settings.extend(list(settings_dict.values())) results = MachineSerializers.MachineSettingSerializer( - all_settings, many=True + list(all_settings), many=True ).data return Response(results) diff --git a/src/backend/InvenTree/machine/machine_types/label_printer.py b/src/backend/InvenTree/machine/machine_types/label_printer.py index f2499187b3..f598f5dd55 100644 --- a/src/backend/InvenTree/machine/machine_types/label_printer.py +++ b/src/backend/InvenTree/machine/machine_types/label_printer.py @@ -111,7 +111,7 @@ class LabelPrinterBaseDriver(BaseDriver): Returns: A class instance of a DRF serializer class, by default this an instance of self.PrintingOptionsSerializer using the *args, **kwargs if existing for this driver """ - return self.PrintingOptionsSerializer(*args, **kwargs) # type: ignore + return self.PrintingOptionsSerializer(*args, **kwargs) # --- helper functions @property diff --git a/src/backend/InvenTree/machine/serializers.py b/src/backend/InvenTree/machine/serializers.py index 669ffe0b75..9bfe97a749 100644 --- a/src/backend/InvenTree/machine/serializers.py +++ b/src/backend/InvenTree/machine/serializers.py @@ -138,7 +138,7 @@ class MachineSettingSerializer(GenericReferencedSettingSerializer): """Custom init method to make the config_type field read only.""" super().__init__(*args, **kwargs) - self.Meta.read_only_fields = ['config_type'] # type: ignore + self.Meta.read_only_fields = ['config_type'] class BaseMachineClassSerializer(serializers.Serializer): diff --git a/src/backend/InvenTree/machine/tests.py b/src/backend/InvenTree/machine/tests.py index 99f9decc35..120ab004b9 100755 --- a/src/backend/InvenTree/machine/tests.py +++ b/src/backend/InvenTree/machine/tests.py @@ -232,10 +232,10 @@ class TestLabelPrinterMachineType(InvenTreeAPITestCase): machine = self.create_machine() # setup the label app - apps.get_app_config('report').create_default_labels() # type: ignore + apps.get_app_config('report').create_default_labels() plg_registry.reload_plugins() - config = cast(PluginConfig, plg_registry.get_plugin(plugin_ref).plugin_config()) # type: ignore + config = cast(PluginConfig, plg_registry.get_plugin(plugin_ref).plugin_config()) config.active = True config.save() diff --git a/src/backend/InvenTree/order/api.py b/src/backend/InvenTree/order/api.py index b8e214a0ac..7ad506bc9e 100644 --- a/src/backend/InvenTree/order/api.py +++ b/src/backend/InvenTree/order/api.py @@ -18,10 +18,12 @@ from django_ical.views import ICalFeed from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import extend_schema, extend_schema_field from rest_framework import status +from rest_framework.exceptions import NotFound from rest_framework.response import Response import build.models import common.models +import common.serializers import common.settings import company.models import stock.models as stock_models @@ -36,7 +38,7 @@ from InvenTree.api import ( ) from InvenTree.fields import InvenTreeOutputOption, OutputConfiguration from InvenTree.filters import SEARCH_ORDER_FILTER, InvenTreeDateFilter -from InvenTree.helpers import str2bool +from InvenTree.helpers import current_date, str2bool from InvenTree.helpers_model import construct_absolute_url, get_base_url from InvenTree.mixins import ( CreateAPI, @@ -80,7 +82,7 @@ class GeneralExtraLineList(SerializerContextMixin, DataExportViewMixin): filter_backends = SEARCH_ORDER_FILTER - ordering_fields = ['quantity', 'notes', 'reference'] + ordering_fields = ['quantity', 'notes', 'reference', 'line'] search_fields = ['quantity', 'notes', 'reference', 'description'] @@ -715,6 +717,7 @@ class PurchaseOrderLineItemList( 'order': 'order__reference', 'status': 'order__status', 'complete_date': 'order__complete_date', + 'line': ['line', 'part__SKU'], } ordering_fields = [ @@ -731,6 +734,7 @@ class PurchaseOrderLineItemList( 'order', 'status', 'complete_date', + 'line', ] search_fields = [ @@ -1065,6 +1069,7 @@ class SalesOrderLineItemList( 'reference', 'sale_price', 'target_date', + 'line', ] ordering_field_aliases = { @@ -1072,6 +1077,7 @@ class SalesOrderLineItemList( 'part': 'part__name', 'IPN': 'part__IPN', 'order': 'order__reference', + 'line': ['line', 'part__name'], } search_fields = ['part__name', 'quantity', 'reference'] @@ -1426,20 +1432,46 @@ class SalesOrderShipmentComplete(CreateAPI): queryset = models.SalesOrderShipment.objects.all() serializer_class = serializers.SalesOrderShipmentCompleteSerializer + def get_shipment(self): + """Return the shipment associated with this endpoint.""" + try: + shipment = models.SalesOrderShipment.objects.get( + pk=self.kwargs.get('pk', None) + ) + except (ValueError, models.SalesOrderShipment.DoesNotExist): + raise NotFound(detail=_('Shipment not found')) + + return shipment + def get_serializer_context(self): """Pass the request object to the serializer.""" ctx = super().get_serializer_context() ctx['request'] = self.request - - try: - ctx['shipment'] = models.SalesOrderShipment.objects.get( - pk=self.kwargs.get('pk', None) - ) - except Exception: - pass + ctx['shipment'] = self.get_shipment() return ctx + @extend_schema(responses={200: common.serializers.TaskDetailSerializer}) + def post(self, request, *args, **kwargs): + """Override the post method to handle shipment completion.""" + shipment = self.get_shipment() + + serializer = self.get_serializer(shipment, data=request.data, partial=True) + serializer.is_valid(raise_exception=True) + data = serializer.validated_data + + task_id = shipment.complete_shipment( + request.user, + tracking_number=data.get('tracking_number', shipment.tracking_number), + invoice_number=data.get('invoice_number', shipment.invoice_number), + link=data.get('link', shipment.link), + shipment_date=data.get('shipment_date', None) or current_date(), + delivery_date=data.get('delivery_date', shipment.delivery_date), + ) + + response = common.serializers.TaskDetailSerializer.from_task(task_id).data + return Response(response, status=response['http_status']) + class ReturnOrderFilter(OrderFilter): """Custom API filters for the ReturnOrderList endpoint.""" @@ -1692,9 +1724,11 @@ class ReturnOrderLineItemList( 'reference', 'target_date', 'received_date', + 'line', ] ordering_field_aliases = { + 'line': ['line', 'item__part__name'], 'part': 'item__part__name', 'IPN': 'item__part__IPN', 'stock': ['item__quantity', 'item__serial_int', 'item__serial'], diff --git a/src/backend/InvenTree/order/migrations/0116_purchaseorderextraline_line_and_more.py b/src/backend/InvenTree/order/migrations/0116_purchaseorderextraline_line_and_more.py new file mode 100644 index 0000000000..740c9382e2 --- /dev/null +++ b/src/backend/InvenTree/order/migrations/0116_purchaseorderextraline_line_and_more.py @@ -0,0 +1,79 @@ +# Generated by Django 5.2.12 on 2026-04-08 03:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("order", "0115_purchaseorder_updated_at_returnorder_updated_at_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="purchaseorderextraline", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + migrations.AddField( + model_name="purchaseorderlineitem", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + migrations.AddField( + model_name="returnorderextraline", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + migrations.AddField( + model_name="returnorderlineitem", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + migrations.AddField( + model_name="salesorderextraline", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + migrations.AddField( + model_name="salesorderlineitem", + name="line", + field=models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ), + ] diff --git a/src/backend/InvenTree/order/models.py b/src/backend/InvenTree/order/models.py index 0eb780984e..777c533375 100644 --- a/src/backend/InvenTree/order/models.py +++ b/src/backend/InvenTree/order/models.py @@ -1,7 +1,7 @@ """Order model definitions.""" from decimal import Decimal -from typing import Any, Optional +from typing import Any, Optional, TypedDict from django.contrib.auth.models import User from django.core.exceptions import ValidationError @@ -179,7 +179,7 @@ class TotalPriceMixin(models.Model): return total -class BaseOrderReportContext(report.mixins.BaseReportContext): +class BaseOrderReportContext(report.mixins.BaseReportContext, TypedDict): """Base context for all order models. Attributes: @@ -199,7 +199,7 @@ class BaseOrderReportContext(report.mixins.BaseReportContext): title: str -class PurchaseOrderReportContext(report.mixins.BaseReportContext): +class PurchaseOrderReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the purchase order model. Attributes: @@ -221,7 +221,7 @@ class PurchaseOrderReportContext(report.mixins.BaseReportContext): supplier: Optional[Company] -class SalesOrderReportContext(report.mixins.BaseReportContext): +class SalesOrderReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the sales order model. Attributes: @@ -243,7 +243,7 @@ class SalesOrderReportContext(report.mixins.BaseReportContext): customer: Optional[Company] -class ReturnOrderReportContext(report.mixins.BaseReportContext): +class ReturnOrderReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the return order model. Attributes: @@ -537,6 +537,19 @@ class Order( related_name='+', ) + @property + def company(self): + """Return the company associated with this order. + + This method must be implemented by any subclass, as the 'company' field may be named differently for different order types (e.g. supplier vs customer). + """ + raise NotImplementedError(f'company() method not implemented for {__class__}') + + @property + def order_address(self): + """Return the Address associated with this order.""" + return self.address or self.company.primary_address + @classmethod def get_status_class(cls): """Return the enumeration class which represents the 'status' field for this model.""" @@ -570,7 +583,9 @@ class PurchaseOrder(TotalPriceMixin, Order): def report_context(self) -> PurchaseOrderReportContext: """Return report context data for this PurchaseOrder.""" - return {**super().report_context(), 'supplier': self.supplier} + return_ctx = super().report_context() + return_ctx.update({'supplier': self.supplier}) + return return_ctx def get_absolute_url(self) -> str: """Get the 'web' URL for this order.""" @@ -1036,6 +1051,29 @@ class PurchaseOrder(TotalPriceMixin, Order): base_part = supplier_part.part + # Update the line item quantity + line.received += quantity + line_items_to_update.append(line) + + # Extract optional serial numbers + serials = item.get('serials', None) + + if serials and type(serials) is list and len(serials) > 0: + serialize = True + else: + serialize = False + serials = [None] + + if base_part.virtual: + # Virtual parts are not received into stock, so skip the rest of the loop + + if serialize: + raise ValidationError( + _('Serial numbers cannot be assigned to virtual parts') + ) + + continue + stock_location = item.get('location', location) or line.get_destination() # Calculate the received quantity in base part units @@ -1050,15 +1088,6 @@ class PurchaseOrder(TotalPriceMixin, Order): else: purchase_price = None - # Extract optional serial numbers - serials = item.get('serials', None) - - if serials and type(serials) is list and len(serials) > 0: - serialize = True - else: - serialize = False - serials = [None] - # Construct dataset for creating a new StockItem instances stock_data = { 'part': supplier_part.part, @@ -1142,10 +1171,6 @@ class PurchaseOrder(TotalPriceMixin, Order): bulk_create_items.append(new_item) - # Update the line item quantity - line.received += quantity - line_items_to_update.append(line) - # Bulk create new stock items if len(bulk_create_items) > 0: stock.models.StockItem.objects.bulk_create(bulk_create_items) @@ -1270,7 +1295,9 @@ class SalesOrder(TotalPriceMixin, Order): def report_context(self) -> SalesOrderReportContext: """Generate report context data for this SalesOrder.""" - return {**super().report_context(), 'customer': self.customer} + return_ctx = super().report_context() + return_ctx.update({'customer': self.customer}) + return return_ctx def get_absolute_url(self) -> str: """Get the 'web' URL for this order.""" @@ -1780,6 +1807,15 @@ class OrderLineItem(InvenTree.models.InvenTreeMetadataModel): if self.price: return self.quantity * self.price + line = models.CharField( + max_length=20, + blank=True, + default='', + null=False, + verbose_name=_('Line Number'), + help_text=_('Line number for this item (optional)'), + ) + reference = models.CharField( max_length=100, blank=True, @@ -1874,12 +1910,14 @@ class PurchaseOrderLineItem(OrderLineItem): verbose_name = _('Purchase Order Line Item') - # Filter for determining if a particular PurchaseOrderLineItem is overdue - OVERDUE_FILTER = ( - Q(received__lt=F('quantity')) - & ~Q(target_date=None) - & Q(target_date__lt=InvenTree.helpers.current_date()) - ) + @classmethod + def get_overdue_filter(cls): + """Filter for determining if a particular PurchaseOrderLineItem is overdue.""" + return ( + Q(received__lt=F('quantity')) + & ~Q(target_date=None) + & Q(target_date__lt=InvenTree.helpers.current_date()) + ) @staticmethod def get_api_url() -> str: @@ -2078,12 +2116,14 @@ class SalesOrderLineItem(OrderLineItem): verbose_name = _('Sales Order Line Item') - # Filter for determining if a particular SalesOrderLineItem is overdue - OVERDUE_FILTER = ( - Q(shipped__lt=F('quantity')) - & ~Q(target_date=None) - & Q(target_date__lt=InvenTree.helpers.current_date()) - ) + @classmethod + def get_overdue_filter(cls): + """Filter for determining if a particular SalesOrderLineItem is overdue.""" + return ( + Q(shipped__lt=F('quantity')) + & ~Q(target_date=None) + & Q(target_date__lt=InvenTree.helpers.current_date()) + ) @staticmethod def get_api_url(): @@ -2194,7 +2234,7 @@ class SalesOrderLineItem(OrderLineItem): return self.shipped >= self.quantity -class SalesOrderShipmentReportContext(report.mixins.BaseReportContext): +class SalesOrderShipmentReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the SalesOrderShipment model. Attributes: @@ -2217,6 +2257,7 @@ class SalesOrderShipmentReportContext(report.mixins.BaseReportContext): class SalesOrderShipment( + InvenTree.models.InvenTreeParameterMixin, InvenTree.models.InvenTreeAttachmentMixin, InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, @@ -2361,9 +2402,16 @@ class SalesOrderShipment( def address(self) -> Address: """Return the shipping address for this shipment. - If no specific shipment address is assigned, return the address from the order. + Lookup priority: + - Specific address assigned to this shipment + - Address assigned to the order + - Primary address of the customer """ - return self.shipment_address or self.order.address + return ( + self.shipment_address + or self.order.address + or self.order.customer.primary_address + ) def is_checked(self) -> bool: """Return True if this shipment has been checked.""" @@ -2415,54 +2463,45 @@ class SalesOrderShipment( 1. Update any stock items associated with this shipment 2. Update the "shipped" quantity of all associated line items 3. Set the "shipment_date" to now + + Arguments: + user: The user who is completing this shipment + + Returns: + task_id: The ID of the background task which is processing this shipment """ import order.tasks # Check if the shipment can be completed (throw error if not) self.check_can_complete() - # Update the "shipment" date - self.shipment_date = kwargs.get( - 'shipment_date', InvenTree.helpers.current_date() - ) - self.shipped_by = user - - # Was a tracking number provided? - tracking_number = kwargs.get('tracking_number') - - if tracking_number is not None: + if tracking_number := kwargs.get('tracking_number'): self.tracking_number = tracking_number - # Was an invoice number provided? - invoice_number = kwargs.get('invoice_number') - - if invoice_number is not None: + if invoice_number := kwargs.get('invoice_number'): self.invoice_number = invoice_number - # Was a link provided? - link = kwargs.get('link') - - if link is not None: + if link := kwargs.get('link'): self.link = link - # Was a delivery date provided? - delivery_date = kwargs.get('delivery_date') - - if delivery_date is not None: - self.delivery_date = delivery_date - self.save() + # Extract shipment date and delivery date from kwargs (if provided) + shipment_date = kwargs.get('shipment_date', InvenTree.helpers.current_date()) + delivery_date = kwargs.get('delivery_date') + # Offload the "completion" of each line item to the background worker # This may take some time, and we don't want to block the main thread - InvenTree.tasks.offload_task( + task_id = InvenTree.tasks.offload_task( order.tasks.complete_sales_order_shipment, - shipment_id=self.pk, - user_id=user.pk if user else None, + self.pk, + user.pk if user else None, + shipment_date, + delivery_date=delivery_date, group='sales_order', ) - trigger_event(SalesOrderEvents.SHIPMENT_COMPLETE, id=self.pk) + return task_id class SalesOrderExtraLine(OrderExtraLine): @@ -2668,7 +2707,9 @@ class ReturnOrder(TotalPriceMixin, Order): def report_context(self) -> ReturnOrderReportContext: """Generate report context data for this ReturnOrder.""" - return {**super().report_context(), 'customer': self.customer} + return_ctx = super().report_context() + return_ctx.update({'customer': self.customer}) + return return_ctx def get_absolute_url(self): """Get the 'web' URL for this order.""" diff --git a/src/backend/InvenTree/order/serializers.py b/src/backend/InvenTree/order/serializers.py index 7ba6fb674f..f79e6d076b 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -27,13 +27,7 @@ from company.serializers import ( ) from generic.states.fields import InvenTreeCustomStatusSerializerMixin from importer.registry import register_importer -from InvenTree.helpers import ( - current_date, - extract_serial_numbers, - hash_barcode, - normalize, - str2bool, -) +from InvenTree.helpers import extract_serial_numbers, hash_barcode, normalize, str2bool from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.serializers import ( FilterableSerializerMixin, @@ -282,6 +276,7 @@ class AbstractLineItemSerializer(FilterableSerializerMixin, serializers.Serializ """Construct a set of fields for this serializer.""" return [ 'pk', + 'line', 'link', 'notes', 'order', @@ -315,6 +310,7 @@ class AbstractExtraLineSerializer( """Construct a set of fields for this serializer.""" return [ 'pk', + 'line', 'description', 'link', 'notes', @@ -594,7 +590,7 @@ class PurchaseOrderLineItemSerializer( queryset = queryset.annotate( overdue=Case( When( - order.models.PurchaseOrderLineItem.OVERDUE_FILTER, + order.models.PurchaseOrderLineItem.get_overdue_filter(), then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()), @@ -1172,7 +1168,7 @@ class SalesOrderLineItemSerializer( overdue=Case( When( Q(order__status__in=SalesOrderStatusGroups.OPEN) - & order.models.SalesOrderLineItem.OVERDUE_FILTER, + & order.models.SalesOrderLineItem.get_overdue_filter(), then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()), @@ -1303,7 +1299,10 @@ class SalesOrderLineItemSerializer( @register_importer() class SalesOrderShipmentSerializer( - FilterableSerializerMixin, NotesFieldMixin, InvenTreeModelSerializer + DataImportExportSerializerMixin, + FilterableSerializerMixin, + NotesFieldMixin, + InvenTreeModelSerializer, ): """Serializer for the SalesOrderShipment class.""" @@ -1326,6 +1325,7 @@ class SalesOrderShipmentSerializer( 'link', 'notes', # Extra detail fields + 'parameters', 'checked_by_detail', 'customer_detail', 'order_detail', @@ -1381,6 +1381,8 @@ class SalesOrderShipmentSerializer( prefetch_fields=['shipment_address'], ) + parameters = common.filters.enable_parameters_filter() + class SalesOrderAllocationSerializer( FilterableSerializerMixin, InvenTreeModelSerializer @@ -1501,35 +1503,6 @@ class SalesOrderShipmentCompleteSerializer(serializers.ModelSerializer): return data - def save(self): - """Save the serializer to complete the SalesOrderShipment.""" - shipment = self.context.get('shipment', None) - - if not shipment: - return - - data = self.validated_data - - request = self.context.get('request') - user = request.user if request else None - - # Extract shipping date (defaults to today's date) - now = current_date() - shipment_date = data.get('shipment_date', now) - if shipment_date is None: - # Shipment date should not be None - check above only - # checks if shipment_date exists in data - shipment_date = now - - shipment.complete_shipment( - user, - tracking_number=data.get('tracking_number', shipment.tracking_number), - invoice_number=data.get('invoice_number', shipment.invoice_number), - link=data.get('link', shipment.link), - shipment_date=shipment_date, - delivery_date=data.get('delivery_date', shipment.delivery_date), - ) - class SalesOrderShipmentAllocationItemSerializer(serializers.Serializer): """A serializer for allocating a single stock-item against a SalesOrder shipment.""" diff --git a/src/backend/InvenTree/order/tasks.py b/src/backend/InvenTree/order/tasks.py index fea6891b34..d9065c2d20 100644 --- a/src/backend/InvenTree/order/tasks.py +++ b/src/backend/InvenTree/order/tasks.py @@ -1,6 +1,7 @@ """Background tasks for the 'order' app.""" from datetime import datetime, timedelta +from typing import Optional from django.contrib.auth.models import Group, User from django.db import transaction @@ -236,29 +237,39 @@ def check_overdue_return_orders(): @tracer.start_as_current_span('complete_sales_order_shipment') -def complete_sales_order_shipment(shipment_id: int, user_id: int) -> None: +def complete_sales_order_shipment( + shipment_id: int, + user_id: int, + shipment_date: str, + delivery_date: Optional[str] = None, +) -> None: """Complete allocations for a pending shipment against a SalesOrder. + Arguments: + shipment_id: The ID of the SalesOrderShipment object to complete + user_id: The ID of the user performing the completion action + shipment_date: The date that the shipment was completed (if None, then the current date is used) + delivery_date: The date that the shipment was delivered (optional) + At this stage, the shipment is assumed to be complete, and we need to perform the required "processing" tasks. """ - try: - shipment = order.models.SalesOrderShipment.objects.get(pk=shipment_id) - except Exception: - # Shipping object does not exist - logger.warning( - 'Failed to complete shipment - no matching SalesOrderShipment for ID <%s>', - shipment_id, - ) - return - - try: - user = User.objects.get(pk=user_id) - except Exception: - user = None + # Do not handle any lookup errors here + # If the shipment cannot be found, then we want the task to fail (and retry later) + shipment = order.models.SalesOrderShipment.objects.get(pk=shipment_id) + user = User.objects.filter(pk=user_id).first() if user_id else None logger.info('Completing SalesOrderShipment <%s>', shipment) with transaction.atomic(): for allocation in shipment.allocations.all(): allocation.complete_allocation(user=user) + + # Once all allocations have been completed, we can mark the shipment as complete + shipment.shipment_date = shipment_date or datetime.now().date() + shipment.delivery_date = delivery_date + shipment.shipped_by = user + shipment.save() + + # Trigger event signalling that the shipment has been completed + trigger_event(SalesOrderEvents.SHIPMENT_COMPLETE, id=shipment.pk) diff --git a/src/backend/InvenTree/order/test_api.py b/src/backend/InvenTree/order/test_api.py index 7952f29eac..7996301b1d 100644 --- a/src/backend/InvenTree/order/test_api.py +++ b/src/backend/InvenTree/order/test_api.py @@ -1336,6 +1336,47 @@ class PurchaseOrderReceiveTest(OrderTest): # Check that the expected number of stock items has been created self.assertEqual(n + 4, StockItem.objects.count()) + def test_virtual(self): + """Test receipt of "virtual" items (i.e. items which do not create a StockItem).""" + line = models.PurchaseOrderLineItem.objects.get(pk=1) + base_part = line.part.part + base_part.virtual = True + base_part.save() + + self.assertEqual(line.received, 0) + + N_ITEMS = base_part.stock_entries().count() + N_STOCK = base_part.get_stock_count() + + # Try with serial numbers (expect to fail) + data = { + 'items': [{'line_item': line.pk, 'quantity': 1, 'serial_numbers': '999'}], + 'location': 1, + } + + response = self.post(self.url, data, expected_code=400) + + self.assertIn( + 'Serial numbers cannot be assigned to virtual parts', + str(response.data['non_field_errors']), + ) + + # Try without serial numbers (expect to succeed) + data = { + 'items': [{'line_item': line.pk, 'quantity': line.quantity}], + 'location': 1, + } + + self.post(self.url, data, expected_code=201) + + # No new stock items should have been created + self.assertEqual(base_part.stock_entries().count(), N_ITEMS) + self.assertEqual(base_part.get_stock_count(), N_STOCK) + + # Check that the line item has been fully received + line.refresh_from_db() + self.assertEqual(line.received, line.quantity) + class SalesOrderTest(OrderTest): """Tests for the SalesOrder API.""" @@ -1990,7 +2031,11 @@ class SalesOrderLineItemTest(OrderTest): self.filter({'order': order_id, 'completed': 0}, 3) # Finally, mark this shipment as 'shipped' - self.post(reverse('api-so-shipment-ship', kwargs={'pk': shipment.pk}), {}) + self.post( + reverse('api-so-shipment-ship', kwargs={'pk': shipment.pk}), + {}, + expected_code=200, + ) # Filter by 'completed' status self.filter({'order': order_id, 'completed': 1}, 2) @@ -2278,7 +2323,7 @@ class SalesOrderAllocateTest(OrderTest): 'shipment_date': '2020-12-05', 'delivery_date': '2023-12-05', }, - expected_code=201, + expected_code=200, ) self.shipment.refresh_from_db() diff --git a/src/backend/InvenTree/order/test_sales_order.py b/src/backend/InvenTree/order/test_sales_order.py index 1a42a7549a..0186cfd90c 100644 --- a/src/backend/InvenTree/order/test_sales_order.py +++ b/src/backend/InvenTree/order/test_sales_order.py @@ -287,8 +287,15 @@ class SalesOrderTest(InvenTreeTestCase): # Mark the shipments as complete self.shipment.complete_shipment(None) + self.shipment.refresh_from_db() self.assertTrue(self.shipment.is_complete()) + # Check that each of the items have now been allocated to the customer + for allocation in self.shipment.allocations.all(): + item = allocation.item + self.assertEqual(item.customer, self.order.customer) + self.assertEqual(item.sales_order, self.order) + # Now, should be OK to ship result = self.order.ship_order(None) @@ -329,6 +336,88 @@ class SalesOrderTest(InvenTreeTestCase): self.assertEqual(self.line.fulfilled_quantity(), 50) self.assertEqual(self.line.allocated_quantity(), 50) + def test_shipment_many_items(self): + """Test completion of a shipment with many items. + + Here, we create a shipment with a very large number of items assigned, + and check that the shipment can be completed without error. + + This test is designed to test that the database does not error out, + even when a large number of items are assigned to a shipment. + + Ref: https://github.com/inventree/InvenTree/pull/11500 + """ + customer = Company.objects.create(name='Customer 2', is_customer=True) + + # Create a new SalesOrder + so = SalesOrder.objects.create(customer=customer, reference='SO-5678') + + shipment = so.shipments.first() + + if not shipment: + shipment = SalesOrderShipment.objects.create( + reference='SHIP-MENT', order=so + ) + + # Create a part + part = Part.objects.create(name='Part 1', salable=True) + + N_ITEMS = 750 + + line = SalesOrderLineItem.objects.create(part=part, order=so, quantity=N_ITEMS) + + # Create stock items, and assign to shipment + allocations = [] + stock_items = [] + + tree_id = StockItem.objects.all().order_by('-tree_id').first().tree_id + + for idx in range(N_ITEMS): + tree_id += 1 + + stock_items.append( + StockItem( + part=part, + quantity=1 + idx % 5, + level=0, + lft=0, + rght=0, + tree_id=tree_id, + ) + ) + + StockItem.objects.bulk_create(stock_items) + + # Check expected available quantity + self.assertEqual(part.total_stock, 2250) + + # Allocate a single quantity from each stock item to the shipment + for item in StockItem.objects.filter(part=part): + allocations.append( + SalesOrderAllocation( + line=line, shipment=shipment, item=item, quantity=1 + ) + ) + + SalesOrderAllocation.objects.bulk_create(allocations) + + # Validate initial conditions for the SalesOrderShipment + self.assertEqual(shipment.allocations.count(), N_ITEMS) + self.assertIsNone(shipment.shipment_date) + self.assertFalse(shipment.is_complete()) + self.assertTrue(shipment.check_can_complete(raise_error=False)) + + # Complete the shipment + shipment.complete_shipment(None) + + shipment.refresh_from_db() + self.assertIsNotNone(shipment.shipment_date) + self.assertTrue(shipment.is_complete()) + + # Part stock quantity should have reduced by 1 for each allocated item + part.refresh_from_db() + self.assertEqual(part.total_stock, 2250 - N_ITEMS) + def test_default_shipment(self): """Test sales order default shipment creation.""" # Default setting value should be False diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index 31169bf878..dbf8cf815a 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -8,10 +8,11 @@ import django_filters.rest_framework.filters as rest_filters from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework.filterset import FilterSet from drf_spectacular.types import OpenApiTypes -from drf_spectacular.utils import extend_schema_field +from drf_spectacular.utils import extend_schema, extend_schema_field from rest_framework import serializers from rest_framework.response import Response +import common.serializers import part.tasks as part_tasks from data_exporter.mixins import DataExportViewMixin from InvenTree.api import ( @@ -73,20 +74,6 @@ class CategoryMixin: queryset = part_serializers.CategorySerializer.annotate_queryset(queryset) return queryset - def get_serializer_context(self): - """Add extra context to the serializer for the CategoryDetail endpoint.""" - ctx = super().get_serializer_context() - - try: - ctx['starred_categories'] = [ - star.category for star in self.request.user.starred_categories.all() - ] - except AttributeError: - # Error is thrown if the view does not have an associated request - ctx['starred_categories'] = [] - - return ctx - class CategoryFilter(FilterSet): """Custom filterset class for the PartCategoryList endpoint.""" @@ -160,7 +147,7 @@ class CategoryFilter(FilterSet): Note: If the "parent" filter is provided, we offload the logic to that method. """ - parent = str2bool(self.data.get('parent', None)) + parent = self.data.get('parent', None) top_level = str2bool(self.data.get('top_level', None)) # If the parent is *not* provided, update the results based on the "cascade" value @@ -266,14 +253,13 @@ class CategoryDetail(CategoryMixin, OutputOptionsMixin, CustomRetrieveUpdateDest """Perform 'update' function and mark this part as 'starred' (or not).""" # Clean up input data data = self.clean_data(request.data) + response = super().update(request, *args, **kwargs) if 'starred' in data: starred = str2bool(data.get('starred', False)) self.get_object().set_starred(request.user, starred, include_parents=False) - response = super().update(request, *args, **kwargs) - return response def destroy(self, request, *args, **kwargs): @@ -614,8 +600,18 @@ class PartValidateBOM(RetrieveUpdateAPI): queryset = Part.objects.all() serializer_class = part_serializers.PartBomValidateSerializer + @extend_schema( + responses={ + 200: common.serializers.TaskDetailSerializer, + 404: common.serializers.TaskDetailSerializer, + } + ) def update(self, request, *args, **kwargs): - """Validate the referenced BomItem instance.""" + """Validate the referenced BomItem instance. + + As this task if offloaded to the background worker, + we return information about the background task which is performing the validation. + """ part = self.get_object() partial = kwargs.pop('partial', False) @@ -629,7 +625,7 @@ class PartValidateBOM(RetrieveUpdateAPI): valid = str2bool(serializer.validated_data.get('valid', False)) # BOM validation may take some time, so we offload it to a background task - offload_task( + task_id = offload_task( part_tasks.validate_bom, part.pk, valid, @@ -637,10 +633,8 @@ class PartValidateBOM(RetrieveUpdateAPI): group='part', ) - # Re-serialize the response - serializer = self.get_serializer(part, many=False) - - return Response(serializer.data) + response = common.serializers.TaskDetailSerializer.from_task(task_id).data + return Response(response, status=response['http_status']) class PartFilter(FilterSet): @@ -1027,27 +1021,8 @@ class PartMixin(SerializerContextMixin): # Indicate that we can create a new Part via this endpoint kwargs['create'] = self.is_create - # Pass a list of "starred" parts to the current user to the serializer - # We do this to reduce the number of database queries required! - if ( - self.starred_parts is None - and self.request is not None - and hasattr(self.request.user, 'starred_parts') - ): - self.starred_parts = [ - star.part for star in self.request.user.starred_parts.all() - ] - kwargs['starred_parts'] = self.starred_parts - return super().get_serializer(*args, **kwargs) - def get_serializer_context(self): - """Extend serializer context data.""" - context = super().get_serializer_context() - context['request'] = self.request - - return context - class PartOutputOptions(OutputConfiguration): """Output options for Part endpoints.""" @@ -1132,6 +1107,7 @@ class PartDetail(PartMixin, OutputOptionsMixin, RetrieveUpdateDestroyAPI): """ # Clean input data data = self.clean_data(request.data) + response = super().update(request, *args, **kwargs) if 'starred' in data: starred = str2bool(data.get('starred', False)) @@ -1140,8 +1116,6 @@ class PartDetail(PartMixin, OutputOptionsMixin, RetrieveUpdateDestroyAPI): request.user, starred, include_variants=False, include_categories=False ) - response = super().update(request, *args, **kwargs) - return response diff --git a/src/backend/InvenTree/part/helpers.py b/src/backend/InvenTree/part/helpers.py index d07e3cfc13..7c55c9810e 100644 --- a/src/backend/InvenTree/part/helpers.py +++ b/src/backend/InvenTree/part/helpers.py @@ -5,7 +5,7 @@ import os from django.conf import settings import structlog -from jinja2 import Environment, select_autoescape +from jinja2.sandbox import SandboxedEnvironment from common.settings import get_global_setting @@ -37,11 +37,7 @@ def compile_full_name_template(*args, **kwargs): # Cache the template string _part_full_name_template_string = template_string - env = Environment( - autoescape=select_autoescape(default_for_string=False, default=False), - variable_start_string='{{', - variable_end_string='}}', - ) + env = SandboxedEnvironment(variable_start_string='{{', variable_end_string='}}') # Compile the template try: diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index a5fb4c4e22..152df37b45 100644 --- a/src/backend/InvenTree/part/models.py +++ b/src/backend/InvenTree/part/models.py @@ -10,7 +10,7 @@ import os import re from datetime import timedelta from decimal import Decimal, InvalidOperation -from typing import cast +from typing import TypedDict, cast from django.conf import settings from django.contrib.auth.models import User @@ -427,7 +427,7 @@ class PartCategoryParameterTemplate(InvenTree.models.InvenTreeMetadataModel): ) -class PartReportContext(report.mixins.BaseReportContext): +class PartReportContext(report.mixins.BaseReportContext, TypedDict): """Report context for the Part model. Attributes: @@ -776,18 +776,12 @@ class Part( 'revision_of': _('Part cannot be a revision of itself') }) - # Part cannot be a revision of a part which is itself a revision - if self.revision_of.revision_of: - raise ValidationError({ - 'revision_of': _( - 'Cannot make a revision of a part which is already a revision' - ) - }) - # If this part is a revision, it must have a revision code if not self.revision: raise ValidationError({ - 'revision': _('Revision code must be specified') + 'revision': _( + 'Revision code must be specified for a part marked as a revision' + ) }) if get_global_setting('PART_REVISION_ASSEMBLY_ONLY'): @@ -2582,21 +2576,22 @@ class Part( Note that some supplier parts may have a different pack_quantity attribute, and this needs to be taken into account! """ + from order.models import PurchaseOrderLineItem + quantity = 0 - # Iterate through all supplier parts - for sp in self.supplier_parts.all(): - # Look at any incomplete line item for open orders - lines = sp.purchase_order_line_items.filter( - order__status__in=PurchaseOrderStatusGroups.OPEN, - quantity__gt=F('received'), - ) + # Find all outstanding PurchaseOrderLineItem objects which reference this part + lines = PurchaseOrderLineItem.objects.filter( + order__status__in=PurchaseOrderStatusGroups.OPEN, + part__part_id=self.pk, + quantity__gt=F('received'), + ).prefetch_related('part') - for line in lines: - remaining = line.quantity - line.received + for line in lines: + remaining = line.quantity - line.received - if remaining > 0: - quantity += sp.base_quantity(remaining) + if remaining > 0: + quantity += line.part.base_quantity(remaining) return quantity @@ -4215,7 +4210,7 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): if n <= 0: return 0.0 - return int(available_stock / n) + return int(Decimal(available_stock) / n) def get_required_quantity(self, build_quantity: float) -> float: """Calculate the required part quantity, based on the supplied build_quantity. diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index 8102ac4641..8788ca8624 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -130,7 +130,16 @@ class CategorySerializer( def get_starred(self, category) -> bool: """Return True if the category is directly "starred" by the current user.""" - return category in self.context.get('starred_categories', []) + if not self.request or not self.request.user: + return False + + # Cache the "starred_categories" list for the current user + if not hasattr(self, 'starred_categories'): + self.starred_categories = [ + star.category.pk for star in self.request.user.starred_categories.all() + ] + + return category.pk in self.starred_categories path = enable_filter( FilterableListField( @@ -638,7 +647,6 @@ class PartSerializer( - Allows us to optionally pass extra fields based on the query. """ - self.starred_parts = kwargs.pop('starred_parts', []) create = kwargs.pop('create', False) super().__init__(*args, **kwargs) @@ -754,7 +762,16 @@ class PartSerializer( def get_starred(self, part) -> bool: """Return "true" if the part is starred by the current user.""" - return part in self.starred_parts + if not self.request or not self.request.user: + return False + + # Cache the "starred_parts" list for the current user + if not hasattr(self, 'starred_parts'): + self.starred_parts = [ + star.part.pk for star in self.request.user.starred_parts.all() + ] + + return part.pk in self.starred_parts # Extra detail for the category category_detail = enable_filter( diff --git a/src/backend/InvenTree/part/tasks.py b/src/backend/InvenTree/part/tasks.py index 87bc6a2f84..296604422b 100644 --- a/src/backend/InvenTree/part/tasks.py +++ b/src/backend/InvenTree/part/tasks.py @@ -12,6 +12,7 @@ from opentelemetry import trace import common.currency import common.notifications +import InvenTree.helpers import InvenTree.helpers_model from common.settings import get_global_setting from InvenTree.tasks import ( diff --git a/src/backend/InvenTree/part/test_api.py b/src/backend/InvenTree/part/test_api.py index 5db1e62f49..557d594f14 100644 --- a/src/backend/InvenTree/part/test_api.py +++ b/src/backend/InvenTree/part/test_api.py @@ -74,7 +74,6 @@ class PartImageTestMixin: {'image': img_file}, expected_code=200, ) - print(response.data) image_name = response.data['image'] self.assertTrue(image_name.startswith('/media/part_images/part_image')) return image_name @@ -111,7 +110,7 @@ class PartCategoryAPITest(InvenTreeAPITestCase): url = reverse('api-part-category-list') # star categories manually for tests as it is not possible with fixures - # because the current user is not fixured itself and throws an invalid + # because the current user is not fixtured itself and throws an invalid # foreign key constraint for pk in [3, 4]: PartCategory.objects.get(pk=pk).set_starred(self.user, True) @@ -277,7 +276,7 @@ class PartCategoryAPITest(InvenTreeAPITestCase): # There should not be any templates left at this point self.assertEqual(PartCategoryParameterTemplate.objects.count(), 0) - def test_bleach(self): + def test_sanitizer(self): """Test that the data cleaning functionality is working. This helps to protect against XSS injection @@ -812,9 +811,14 @@ class PartAPITest(PartAPITestBase): # Children of PartCategory<1>, do not cascade response = self.get(url, {'parent': 1, 'cascade': 'false'}) - self.assertEqual(len(response.data), 3) + # Children of PartCategory<7>, with or without cascade + # Only 1 child in either case + for cascade in ['true', 'false']: + response = self.get(url, {'parent': 7, 'cascade': cascade}) + self.assertEqual(len(response.data), 1) + def test_add_categories(self): """Check that we can add categories.""" data = {'name': 'Animals', 'description': 'All animals go here'} @@ -1644,7 +1648,7 @@ class PartCreationTests(PartAPITestBase): self.assertEqual(cat.parameter_templates.count(), 3) - # Creat a new Part, without copying category parameters + # Create a new Part, without copying category parameters data = self.post( reverse('api-part-list'), { @@ -1833,7 +1837,7 @@ class PartDetailTests(PartImageTestMixin, PartAPITestBase): # Part should not have an image! with self.assertRaises(ValueError): - print(p.image.file) + _x = p.image.file # Try to upload a non-image file test_path = get_testfolder_dir() / 'dummy_image' @@ -2314,7 +2318,7 @@ class PartAPIAggregationTest(InvenTreeAPITestCase): self.assertEqual(data['allocated_to_build_orders'], 0) self.assertEqual(data['allocated_to_sales_orders'], 0) - # The unallocated stock count should equal the 'in stock' coutn + # The unallocated stock count should equal the 'in stock' count in_stock = data['in_stock'] self.assertEqual(in_stock, 126) self.assertEqual(data['unallocated_stock'], in_stock) diff --git a/src/backend/InvenTree/part/test_notification_stale.py b/src/backend/InvenTree/part/test_notification_stale.py index 86a4189a42..7999ab6ed5 100644 --- a/src/backend/InvenTree/part/test_notification_stale.py +++ b/src/backend/InvenTree/part/test_notification_stale.py @@ -50,8 +50,8 @@ class StaleStockNotificationTests(InvenTreeTestCase): set_global_setting('STOCK_STALE_DAYS', 7, self.user) # Clear notifications - NotificationEntry.objects.all().delete() # type: ignore[attr-defined] - NotificationMessage.objects.all().delete() # type: ignore[attr-defined] + NotificationEntry.objects.all().delete() + NotificationMessage.objects.all().delete() def create_stock_items_with_expiry(self): """Create stock items with various expiry dates for testing.""" @@ -101,7 +101,7 @@ class StaleStockNotificationTests(InvenTreeTestCase): part.tasks.notify_stale_stock(self.user, []) # No notifications should be created - self.assertEqual(NotificationMessage.objects.count(), 0) # type: ignore[attr-defined] + self.assertEqual(NotificationMessage.objects.count(), 0) def test_notify_stale_stock_single_item(self): """Test notify_stale_stock with a single stale item.""" diff --git a/src/backend/InvenTree/part/test_part.py b/src/backend/InvenTree/part/test_part.py index 8bb2ca37e4..81551bfabf 100644 --- a/src/backend/InvenTree/part/test_part.py +++ b/src/backend/InvenTree/part/test_part.py @@ -412,15 +412,11 @@ class PartTest(TestCase): name='Master Part', description='Master part (revision B)' ) - with self.assertRaises(ValidationError) as exc: - rev_b.revision_of = rev_a - rev_b.revision = 'B' - rev_b.save() - - self.assertIn( - 'Cannot make a revision of a part which is already a revision', - str(exc.exception), - ) + # Ensure we can make a revision of a revision + rev_b.revision_of = rev_a + rev_b.variant_of = template + rev_b.revision = 'B' + rev_b.save() rev_b.variant_of = template rev_b.revision_of = part diff --git a/src/backend/InvenTree/plugin/api.py b/src/backend/InvenTree/plugin/api.py index 91580062b3..9093d6e7f4 100644 --- a/src/backend/InvenTree/plugin/api.py +++ b/src/backend/InvenTree/plugin/api.py @@ -210,6 +210,7 @@ class PluginInstall(CreateAPI): queryset = PluginConfig.objects.none() serializer_class = PluginSerializers.PluginConfigInstallSerializer + permission_classes = [InvenTree.permissions.IsSuperuserOrSuperScope] def create(self, request, *args, **kwargs): """Install a plugin via the API.""" diff --git a/src/backend/InvenTree/plugin/base/barcodes/mixins.py b/src/backend/InvenTree/plugin/base/barcodes/mixins.py index 99c4661f57..c744cc04f2 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/mixins.py +++ b/src/backend/InvenTree/plugin/base/barcodes/mixins.py @@ -60,7 +60,7 @@ class BarcodeMixin: """Does this plugin support barcode generation.""" try: # Attempt to call the generate method - self.generate(None) # type: ignore + self.generate(None) except NotImplementedError: # If a NotImplementedError is raised, then barcode generation is not supported return False diff --git a/src/backend/InvenTree/plugin/base/integration/AppMixin.py b/src/backend/InvenTree/plugin/base/integration/AppMixin.py index 532cc2578e..b3690afee1 100644 --- a/src/backend/InvenTree/plugin/base/integration/AppMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/AppMixin.py @@ -113,9 +113,14 @@ class AppMixin: break # unregister the models (yes, models are just kept in multilevel dicts) + # Note: Django registers models under the app_label (app_name), + # not the full dotted plugin_path. For plugins with nested module + # paths (e.g. "myplugin.myplugin"), plugin_path != app_name, so + # using plugin_path here would look up the wrong key in the + # defaultdict and raise KeyError on .pop(). for model in models: # remove model from general registry - apps.all_models[plugin_path].pop(model) + apps.all_models[app_name].pop(model, None) # clear the registry for that app # so that the import trick will work on reloading the same plugin diff --git a/src/backend/InvenTree/plugin/base/integration/DataExport.py b/src/backend/InvenTree/plugin/base/integration/DataExport.py index 97d38ec493..15649e78dc 100644 --- a/src/backend/InvenTree/plugin/base/integration/DataExport.py +++ b/src/backend/InvenTree/plugin/base/integration/DataExport.py @@ -22,6 +22,9 @@ class DataExportMixin: ExportOptionsSerializer = None + # How many rows to fetch into memory at once when exporting data? + EXPORT_CHUNK_SIZE: int = 250 + class MixinMeta: """Meta options for this mixin.""" @@ -108,10 +111,29 @@ class DataExportMixin: Returns: The exported data (a list of dict objects) """ - # The default implementation simply serializes the queryset - return serializer_class( - queryset, many=True, exporting=True, context=serializer_context or {} - ).data + output.refresh_from_db() + N = queryset.count() + + rows = [] + + offset = 0 + + while offset < N: + chunk = queryset[offset : offset + self.EXPORT_CHUNK_SIZE] + + chunk_rows = serializer_class( + chunk, many=True, exporting=True, context=serializer_context or {} + ).data + + rows.extend(chunk_rows) + + offset += self.EXPORT_CHUNK_SIZE + + # Update the export progress + output.progress += len(chunk_rows) + output.save() + + return rows def get_export_options_serializer(self, **kwargs) -> serializers.Serializer | None: """Return a serializer class with dynamic export options for this plugin. diff --git a/src/backend/InvenTree/plugin/base/integration/test_mixins.py b/src/backend/InvenTree/plugin/base/integration/test_mixins.py index a5495fb04f..4cf7e34714 100644 --- a/src/backend/InvenTree/plugin/base/integration/test_mixins.py +++ b/src/backend/InvenTree/plugin/base/integration/test_mixins.py @@ -1,5 +1,8 @@ """Unit tests for base mixins for plugins.""" +from collections import OrderedDict, defaultdict +from unittest.mock import MagicMock, patch + from django.conf import settings from django.test import TestCase from django.urls import include, path, re_path @@ -145,6 +148,56 @@ class AppMixinTest(BaseMixinDefinition, TestCase): """Test that the sample plugin registers in settings.""" self.assertIn('plugin.samples.integration', settings.INSTALLED_APPS) + def test_deactivate_nested_plugin_path(self): + """Test that _deactivate_mixin uses app_name (not plugin_path) for model deregistration. + + External plugins with nested module paths (e.g. "purchase_quotation.purchase_quotation") + have plugin_path != app_name. Django registers models under app_name (the last component), + so using the full plugin_path to look up apps.all_models would access the wrong key + in the defaultdict and raise KeyError on .pop(). + """ + # Simulate a nested plugin path like an external plugin installed via: + # entry_points={"inventree_plugins": [ + # "PurchaseQuotationPlugin = purchase_quotation.plugin:PurchaseQuotationPlugin" + # ]} + # where the package structure is purchase_quotation/purchase_quotation/ + nested_plugin_path = 'purchase_quotation.purchase_quotation' + app_name = 'purchase_quotation' # Django registers models under this + + # Set up a mock registry with the nested plugin path + mock_registry = MagicMock() + mock_registry.installed_apps = [nested_plugin_path] + + # Create a fake model + mock_model = MagicMock() + mock_model._meta.model_name = 'purchasequotation' + + # Create a mock app_config that returns our fake model + mock_app_config = MagicMock() + mock_app_config.get_models.return_value = [mock_model] + + # Set up apps.all_models with the model registered under app_name + # (this is how Django actually stores it) + fake_all_models = defaultdict(OrderedDict) + fake_all_models[app_name]['purchasequotation'] = mock_model + + with ( + patch( + 'plugin.base.integration.AppMixin.apps.get_app_config', + return_value=mock_app_config, + ), + patch('plugin.base.integration.AppMixin.apps.all_models', fake_all_models), + ): + # This should NOT raise KeyError - the fix ensures we use + # app_name (the last path component) instead of the full plugin_path + AppMixin._deactivate_mixin(mock_registry, force_reload=False) + + # Verify the model was removed from the registry + self.assertNotIn('purchasequotation', fake_all_models.get(app_name, {})) + # Verify the full nested path was NOT used as a key + # (defaultdict would have created an empty entry if accessed) + self.assertNotIn(nested_plugin_path, fake_all_models) + class NavigationMixinTest(BaseMixinDefinition, TestCase): """Tests for NavigationMixin.""" diff --git a/src/backend/InvenTree/plugin/base/supplier/mixins.py b/src/backend/InvenTree/plugin/base/supplier/mixins.py index 27c35d4d47..56e924f061 100644 --- a/src/backend/InvenTree/plugin/base/supplier/mixins.py +++ b/src/backend/InvenTree/plugin/base/supplier/mixins.py @@ -161,7 +161,7 @@ class SupplierMixin(SettingsMixin, Generic[PartData]): # assign parent_part to root_part if root_part has no variant of already if root_part and not root_part.is_template and not root_part.variant_of: - root_part.variant_of = parent_part # type: ignore + root_part.variant_of = parent_part root_part.save() return parent_part diff --git a/src/backend/InvenTree/plugin/base/ui/mixins.py b/src/backend/InvenTree/plugin/base/ui/mixins.py index cbffd1fb9a..4ab84ef6ca 100644 --- a/src/backend/InvenTree/plugin/base/ui/mixins.py +++ b/src/backend/InvenTree/plugin/base/ui/mixins.py @@ -83,7 +83,7 @@ class UserInterfaceMixin: def __init__(self): """Register mixin.""" super().__init__() - self.add_mixin(PluginMixinEnum.USER_INTERFACE, True, __class__) # type: ignore + self.add_mixin(PluginMixinEnum.USER_INTERFACE, True, __class__) def get_ui_features( self, feature_type: FeatureType, context: dict, request: Request, **kwargs diff --git a/src/backend/InvenTree/plugin/broken/broken_file.py b/src/backend/InvenTree/plugin/broken/broken_file.py index 83437025cf..f56932e876 100644 --- a/src/backend/InvenTree/plugin/broken/broken_file.py +++ b/src/backend/InvenTree/plugin/broken/broken_file.py @@ -7,4 +7,4 @@ class BrokenFileIntegrationPlugin(InvenTreePlugin): """An very broken plugin.""" -aaa = bb # noqa: F821 # type: ignore[unresolved-reference] +aaa = bb # noqa: F821 diff --git a/src/backend/InvenTree/plugin/installer.py b/src/backend/InvenTree/plugin/installer.py index b1fb2de03f..acf6584a8d 100644 --- a/src/backend/InvenTree/plugin/installer.py +++ b/src/backend/InvenTree/plugin/installer.py @@ -236,8 +236,8 @@ def install_plugin(url=None, packagename=None, user=None, version=None): user: Optional user performing the installation version: Optional version specifier """ - if user and not user.is_staff: - raise ValidationError(_('Only staff users can administer plugins')) + if user and not user.is_superuser: + raise ValidationError(_('Only superuser accounts can administer plugins')) if settings.PLUGINS_INSTALL_DISABLED: raise ValidationError(_('Plugin installation is disabled')) @@ -269,6 +269,13 @@ def install_plugin(url=None, packagename=None, user=None, version=None): if version: full_pkg = f'{full_pkg}=={version}' + if not full_pkg: + raise ValidationError(_('No package name or URL provided for installation')) + + # Sanitize the package name for installation + if any(c in full_pkg for c in ';&|`$()'): + raise ValidationError(_('Invalid characters in package name or URL')) + install_name.append(full_pkg) ret = {} @@ -333,6 +340,9 @@ def uninstall_plugin(cfg: plugin.models.PluginConfig, user=None, delete_config=T """ from plugin.registry import registry + if user and not user.is_superuser: + raise ValidationError(_('Only superuser accounts can administer plugins')) + if settings.PLUGINS_INSTALL_DISABLED: raise ValidationError(_('Plugin uninstalling is disabled')) diff --git a/src/backend/InvenTree/plugin/plugin.py b/src/backend/InvenTree/plugin/plugin.py index 558ca3edf8..9019951c11 100644 --- a/src/backend/InvenTree/plugin/plugin.py +++ b/src/backend/InvenTree/plugin/plugin.py @@ -1,14 +1,17 @@ """Base Class for InvenTree plugins.""" import inspect +import json +import re import warnings from datetime import datetime -from distutils.sysconfig import get_python_lib # type: ignore[import] +from distutils.sysconfig import get_python_lib from importlib.metadata import PackageNotFoundError, metadata from pathlib import Path from typing import Optional from django.conf import settings +from django.contrib.staticfiles.storage import StaticFilesStorage from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ @@ -92,16 +95,16 @@ class MetaBase: TITLE = None @mark_final - def get_meta_value(self, key: str, old_key: Optional[str] = None, __default=None): + def get_meta_value(self, key: str, old_key: Optional[str] = None, default=None): """Reference a meta item with a key. Args: key (str): key for the value old_key (str, optional): deprecated key - will throw warning - __default (optional): Value if nothing with key can be found. Defaults to None. + default (optional): Value if nothing with key can be found. Defaults to None. Returns: - Value referenced with key, old_key or __default if set and not value found + Value referenced with key, old_key or default if set and not value found """ value = getattr(self, key, None) @@ -117,9 +120,9 @@ class MetaBase: stacklevel=2, ) - # Use __default if still nothing set - if (value is None) and __default: - return __default + # Use default if still nothing set + if value is None and default is not None: + return default return value @mark_final @@ -578,35 +581,119 @@ class InvenTreePlugin(VersionMixin, MixinBase, MetaBase): # endregion + def get_static_path(self) -> list[str]: + """Return the path components to the plugin's static files.""" + return ['plugins', self.slug] + + def hashed_file_lookup(self, *args) -> str | None: + """Find a hashed version of the given file, if it exists. + + This is used to support cache busting for static files. + + Arguments: + *args: Path components to the static file (e.g. 'js', 'admin.js') + + Returns: + str: Path to the hashed version of the file if it exists, else None + """ + storage = StaticFilesStorage() + + # First, try to find a manifest file which maps original filenames to hashed filenames + # We only support vite manifest files - as generated by the plugin creator framework + manifest_file = str(Path(*self.get_static_path(), '.vite', 'manifest.json')) + + if not storage.exists(manifest_file): + return None + + # Read the contents of the manifest file + try: + with storage.open(manifest_file) as f: + manifest = json.load(f) + except json.JSONDecodeError: + logger.error(f"Failed to parse manifest file for plugin '{self.SLUG}'") + return None + + # Find the entry associated with the requested file + # Remove the file extension, as the manifest may contain hashed files with different extensions (e.g. .js, .css) + filename = str(args[-1] or '').split('.')[0] + pattern = re.compile(rf'{re.escape(filename)}\.(js|jsx|tsx)') + + for key, value in manifest.items(): + if re.search(pattern, key): + return value.get('file') + + return None + @mark_final - def plugin_static_file(self, *args) -> str: + def plugin_static_file( + self, *args, check_exists: bool = True, check_hash: bool = True + ) -> str: """Construct a path to a static file within the plugin directory. + Arguments: + *args: Path components to the static file (e.g. 'js', 'admin.js') + check_exists: If True, will check if the file actually exists on disk + check_hash: If True, will fallback to checking if the file has a hash in its name (for cache busting) + - This will return a URL can be used to access the static file - The path is constructed using the STATIC_URL setting and the plugin slug - Note: If the plugin is selected for "development" mode, the path will point to a vite server URL + Hash Checking: + + - Plugins may distribute static files with a hash in the filename for cache busting purposes (e.g. 'file-abc123.js'). + - If available, this file is priorities, and the non-hashed version is ignored. + - If no hashed file is available, the non-hashed version will be used (if it exists). + - If check_hash is False, the non-hashed version of the file will be used (even if a hashed version exists). + """ - import os - from django.conf import settings + from django.contrib.staticfiles.storage import StaticFilesStorage + # If the plugin is selected for development mode, use the development host + # This allows the plugin developer to run a local vite server and have the plugin load files directly from that server if ( settings.DEBUG and settings.PLUGIN_DEV_HOST and settings.PLUGIN_DEV_SLUG and self.SLUG == settings.PLUGIN_DEV_SLUG ): - # If the plugin is selected for development mode, use the development host pathname = '/'.join(list(args)) url = f'{settings.PLUGIN_DEV_HOST}/src/{pathname}' url = url.replace('.js', '.tsx') - else: - # Otherwise, construct the URL using the STATIC_URL setting - url = os.path.join(settings.STATIC_URL, 'plugins', self.SLUG, *args) + return url - if not url.startswith('/'): - url = '/' + url + storage = StaticFilesStorage() + + file_name = args[-1] or '' + + # The file may be specified with a function, e.g. 'file.js:renderFunction' + if ':' in file_name: + file_name, function_name = file_name.split(':')[:2] + else: + function_name = '' + + # Determine the preceding path to the file (if any) + file_path = args[:-1] + + # If enabled, check for a hashed version of the file + if check_hash: + file_name = self.hashed_file_lookup(*file_path, file_name) or file_name + + full_path = str(Path(*self.get_static_path(), *file_path, file_name)) + + if check_exists: + if not storage.exists(full_path): + logger.error( + f"Static file not found for plugin '{self.SLUG}': {full_path}" + ) + + # Resolve the URL to the static file + url = storage.url(full_path) + + # Re-append the function name (if provided) + if function_name: + url += f':{function_name}' return url diff --git a/src/backend/InvenTree/plugin/registry.py b/src/backend/InvenTree/plugin/registry.py index 47f43d997f..382a973906 100644 --- a/src/backend/InvenTree/plugin/registry.py +++ b/src/backend/InvenTree/plugin/registry.py @@ -222,13 +222,18 @@ class PluginsRegistry: import InvenTree.ready from plugin.models import PluginConfig - if InvenTree.ready.isImportingData(): - return None + # Under certain circumstances, we want to avoid creating new PluginConfig instances in the database + can_create = ( + InvenTree.ready.canAppAccessDatabase( + allow_plugins=False, allow_shell=True, allow_test=True + ) + and not InvenTree.ready.isReadOnlyCommand() + ) try: cfg = PluginConfig.objects.filter(key=slug).first() - if not cfg: + if not cfg and can_create: logger.debug( "get_plugin_config: Creating new PluginConfig for '%s'", slug ) @@ -781,9 +786,9 @@ class PluginsRegistry: f"Plugin '{p}' is not compatible with the current InvenTree version {v}" ) if v := plg_i.MIN_VERSION: - _msg += _(f'Plugin requires at least version {v}') # type: ignore[unsupported-operator] + _msg += _(f'Plugin requires at least version {v}') # ty:ignore[unsupported-operator] if v := plg_i.MAX_VERSION: - _msg += _(f'Plugin requires at most version {v}') # type: ignore[unsupported-operator] + _msg += _(f'Plugin requires at most version {v}') # ty:ignore[unsupported-operator] # Log to error stack log_registry_error(_msg, reference=f'{p}:init_plugin') else: diff --git a/src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py b/src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py index c27476f83e..4ea7d761b8 100644 --- a/src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py +++ b/src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py @@ -152,7 +152,7 @@ class SampleSupplierPlugin(SupplierMixin, InvenTreePlugin): # after the template part was created, we need to refresh the part from the db because its tree id may have changed # which results in an error if saved directly part.refresh_from_db() - part.variant_of = parent_part # type: ignore + part.variant_of = parent_part part.save() return part diff --git a/src/backend/InvenTree/plugin/serializers.py b/src/backend/InvenTree/plugin/serializers.py index 5fbff385b4..b12d0d3590 100644 --- a/src/backend/InvenTree/plugin/serializers.py +++ b/src/backend/InvenTree/plugin/serializers.py @@ -165,6 +165,9 @@ class PluginConfigInstallSerializer(serializers.Serializer): version = data.get('version', None) user = self.context['request'].user + if not user or not user.is_superuser: + raise ValidationError(_('Only superuser accounts can administer plugins')) + return install_plugin( url=url, packagename=packagename, version=version, user=user ) @@ -266,10 +269,13 @@ class PluginUninstallSerializer(serializers.Serializer): """Uninstall the specified plugin.""" from plugin.installer import uninstall_plugin + user = self.context['request'].user + + if not user or not user.is_superuser: + raise ValidationError(_('Only superuser accounts can administer plugins')) + return uninstall_plugin( - instance, - user=self.context['request'].user, - delete_config=validated_data.get('delete_config', True), + instance, user=user, delete_config=validated_data.get('delete_config', True) ) diff --git a/src/backend/InvenTree/plugin/test_api.py b/src/backend/InvenTree/plugin/test_api.py index ca6c312670..820c5c96fa 100644 --- a/src/backend/InvenTree/plugin/test_api.py +++ b/src/backend/InvenTree/plugin/test_api.py @@ -63,6 +63,21 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): """Test the plugin install command.""" url = reverse('api-plugin-install') + # Requires superuser permissions + self.user.is_superuser = False + self.user.save() + + self.post( + url, + {'confirm': True, 'packagename': self.PKG_NAME}, + expected_code=403, + max_query_time=30, + ) + + # Provide superuser permissions + self.user.is_superuser = True + self.user.save() + # invalid package name data = self.post( url, @@ -209,7 +224,7 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): test_plg.refresh_from_db() self.assertTrue(test_plg.is_active()) - def test_pluginCfg_delete(self): + def test_plugin_config_delete(self): """Test deleting a config.""" test_plg = self.plugin_confs.first() assert test_plg is not None diff --git a/src/backend/InvenTree/plugin/test_plugin.py b/src/backend/InvenTree/plugin/test_plugin.py index cdabd46477..c918eadc3d 100644 --- a/src/backend/InvenTree/plugin/test_plugin.py +++ b/src/backend/InvenTree/plugin/test_plugin.py @@ -11,11 +11,14 @@ from typing import Optional from unittest import mock from unittest.mock import patch +from django.contrib.auth.models import User +from django.core.exceptions import ValidationError from django.test import TestCase, override_settings import plugin.templatetags.plugin_extras as plugin_tags from InvenTree.unit_test import PluginRegistryMixin, TestQueryMixin from plugin import InvenTreePlugin, PluginMixinEnum +from plugin.installer import install_plugin from plugin.registry import registry from plugin.samples.integration.another_sample import ( NoIntegrationPlugin, @@ -209,6 +212,54 @@ class InvenTreePluginTests(TestCase): if plug: self.assertEqual(plug.is_active(), False) + def test_plugin_static_file_lookup(self): + """Test that the plugin static file lookup works as expected.""" + from django.contrib.staticfiles.storage import StaticFilesStorage + from django.core.files.base import ContentFile + + # Create a sample plugin with a known static file + class StaticFilePlugin(InvenTreePlugin): + NAME = 'StaticFilePlugin' + SLUG = 'static-file-test' + + def get_static_file_url(self, file_name): + return self.get_plugin_static_file(file_name) + + plugin = StaticFilePlugin() + storage = StaticFilesStorage() + + # A simple test to ensure the path is correctly resolved + self.assertEqual( + plugin.plugin_static_file( + 'sample.js', check_exists=False, check_hash=False + ), + storage.url('plugins/static-file-test/sample.js'), + ) + + manifest_path = 'plugins/static-file-test/.vite/manifest.json' + + manifest_data = textwrap.dedent("""{ + "src/sample.js": { + "file": "sample.123456.js", + "name": "sample", + "src": "src/sample.js", + "isEntry": true + } + }""") + + # A more comprehensive test - to find a hashed version of the file + # Note: This requires a manifest file to be present - let's create one + if not storage.exists(manifest_path): + storage.save(manifest_path, content=ContentFile(manifest_data)) + + lookup = plugin.plugin_static_file( + 'sample.js', check_exists=False, check_hash=True + ) + + self.assertEqual( + lookup, storage.url('plugins/static-file-test/sample.123456.js') + ) + class RegistryTests(TestQueryMixin, PluginRegistryMixin, TestCase): """Tests for registry loading methods.""" @@ -254,7 +305,7 @@ class RegistryTests(TestQueryMixin, PluginRegistryMixin, TestCase): def test_folder_loading(self): """Test that plugins in folders outside of BASE_DIR get loaded.""" # Run in temporary directory -> always a new random name - with tempfile.TemporaryDirectory() as tmp: # type: ignore[no-matching-overload] + with tempfile.TemporaryDirectory() as tmp: # Fill directory with sample data new_dir = Path(tmp).joinpath('mock') shutil.copytree(self.mockDir(), new_dir) @@ -278,6 +329,9 @@ class RegistryTests(TestQueryMixin, PluginRegistryMixin, TestCase): def test_broken_samples(self): """Test that the broken samples trigger reloads.""" + # Reset the registry to a known state + registry.errors = {} + # In the base setup there are no errors self.assertEqual(len(registry.errors), 0) @@ -638,3 +692,40 @@ class RegistryTests(TestQueryMixin, PluginRegistryMixin, TestCase): self.assertTrue(cfg.is_builtin()) self.assertFalse(cfg.is_package()) self.assertFalse(cfg.is_sample()) + + +class InstallerTests(TestCase): + """Tests for the plugin installer code.""" + + def test_plugin_install_errors(self): + """Test error handling for plugin installation.""" + # No data provided + with self.assertRaises(ValidationError) as e: + install_plugin() + + self.assertIn( + 'No package name or URL provided for installation', str(e.exception) + ) + + # Invalid package name + for pkg in [ + 'invalid;name', + 'invalid&name', + 'invalid|name', + 'invalid`name', + 'invalid$(name)', + ]: + with self.assertRaises(ValidationError) as e: + install_plugin(packagename=pkg) + + self.assertIn('Invalid characters in package name or URL', str(e.exception)) + + # Non superuser account + user = User.objects.create(username='my-user', is_superuser=False) + + with self.assertRaises(ValidationError) as e: + install_plugin(user=user, packagename='some-package') + + self.assertIn( + 'Only superuser accounts can administer plugins', str(e.exception) + ) diff --git a/src/backend/InvenTree/report/api.py b/src/backend/InvenTree/report/api.py index a02bfe74ae..6eebee27f6 100644 --- a/src/backend/InvenTree/report/api.py +++ b/src/backend/InvenTree/report/api.py @@ -224,23 +224,27 @@ class LabelPrint(GenericAPIView): return Response(DataOutputSerializer(output).data, status=201) -class LabelTemplateList(TemplatePermissionMixin, ListCreateAPI): +class LabelTemplateMixin: + """Mixin class for label template API views.""" + + queryset = report.models.LabelTemplate.objects.all().prefetch_related('updated_by') + serializer_class = report.serializers.LabelTemplateSerializer + + +class LabelTemplateList(TemplatePermissionMixin, LabelTemplateMixin, ListCreateAPI): """API endpoint for viewing list of LabelTemplate objects.""" - queryset = report.models.LabelTemplate.objects.all() - serializer_class = report.serializers.LabelTemplateSerializer filterset_class = LabelFilter filter_backends = [DjangoFilterBackend, InvenTreeSearchFilter] search_fields = ['name', 'description'] ordering_fields = ['name', 'enabled'] -class LabelTemplateDetail(TemplatePermissionMixin, RetrieveUpdateDestroyAPI): +class LabelTemplateDetail( + TemplatePermissionMixin, LabelTemplateMixin, RetrieveUpdateDestroyAPI +): """Detail API endpoint for label template model.""" - queryset = report.models.LabelTemplate.objects.all() - serializer_class = report.serializers.LabelTemplateSerializer - class ReportPrint(GenericAPIView): """API endpoint for printing reports.""" @@ -300,23 +304,27 @@ class ReportPrint(GenericAPIView): return Response(DataOutputSerializer(output).data, status=201) -class ReportTemplateList(TemplatePermissionMixin, ListCreateAPI): +class ReportTemplateMixin: + """Mixin class for report template API views.""" + + queryset = report.models.ReportTemplate.objects.all().prefetch_related('updated_by') + serializer_class = report.serializers.ReportTemplateSerializer + + +class ReportTemplateList(TemplatePermissionMixin, ReportTemplateMixin, ListCreateAPI): """API endpoint for viewing list of ReportTemplate objects.""" - queryset = report.models.ReportTemplate.objects.all() - serializer_class = report.serializers.ReportTemplateSerializer filterset_class = ReportFilter filter_backends = [DjangoFilterBackend, InvenTreeSearchFilter] search_fields = ['name', 'description'] ordering_fields = ['name', 'enabled'] -class ReportTemplateDetail(TemplatePermissionMixin, RetrieveUpdateDestroyAPI): +class ReportTemplateDetail( + TemplatePermissionMixin, ReportTemplateMixin, RetrieveUpdateDestroyAPI +): """Detail API endpoint for report template model.""" - queryset = report.models.ReportTemplate.objects.all() - serializer_class = report.serializers.ReportTemplateSerializer - class ReportSnippetList(TemplatePermissionMixin, ListCreateAPI): """API endpoint for listing ReportSnippet objects.""" diff --git a/src/backend/InvenTree/report/apps.py b/src/backend/InvenTree/report/apps.py index 534c239546..40de211e32 100644 --- a/src/backend/InvenTree/report/apps.py +++ b/src/backend/InvenTree/report/apps.py @@ -7,6 +7,7 @@ from django.apps import AppConfig from django.core.exceptions import AppRegistryNotReady, ValidationError from django.core.files.base import ContentFile from django.core.files.storage import default_storage +from django.db import transaction from django.db.utils import IntegrityError, OperationalError, ProgrammingError import structlog @@ -48,6 +49,9 @@ class ReportConfig(AppConfig): if not InvenTree.ready.canAppAccessDatabase(allow_test=False): return # pragma: no cover + if InvenTree.ready.isReadOnlyCommand(): + return # pragma: no cover + with maintenance_mode_on(): try: self.create_default_labels() @@ -160,9 +164,10 @@ class ReportConfig(AppConfig): # Otherwise, create a new entry try: # Create a new entry - report.models.LabelTemplate.objects.create( - **template, template=self.file_from_template('label', filename) - ) + with transaction.atomic(): + report.models.LabelTemplate.objects.create( + **template, template=self.file_from_template('label', filename) + ) logger.info("Creating new label template: '%s'", template['name']) except ValidationError: logger.warning( diff --git a/src/backend/InvenTree/report/migrations/0032_labeltemplate_updated_labeltemplate_updated_by_and_more.py b/src/backend/InvenTree/report/migrations/0032_labeltemplate_updated_labeltemplate_updated_by_and_more.py new file mode 100644 index 0000000000..aaf2c9024e --- /dev/null +++ b/src/backend/InvenTree/report/migrations/0032_labeltemplate_updated_labeltemplate_updated_by_and_more.py @@ -0,0 +1,64 @@ +# Generated by Django 5.2.12 on 2026-04-09 01:13 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("report", "0031_reporttemplate_merge"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name="labeltemplate", + name="updated", + field=models.DateTimeField( + blank=True, + default=None, + help_text="Timestamp of last update", + null=True, + verbose_name="Updated", + ), + ), + migrations.AddField( + model_name="labeltemplate", + name="updated_by", + field=models.ForeignKey( + blank=True, + help_text="User who last updated this object", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated", + to=settings.AUTH_USER_MODEL, + verbose_name="Update By", + ), + ), + migrations.AddField( + model_name="reporttemplate", + name="updated", + field=models.DateTimeField( + blank=True, + default=None, + help_text="Timestamp of last update", + null=True, + verbose_name="Updated", + ), + ), + migrations.AddField( + model_name="reporttemplate", + name="updated_by", + field=models.ForeignKey( + blank=True, + help_text="User who last updated this object", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="%(class)s_updated", + to=settings.AUTH_USER_MODEL, + verbose_name="Update By", + ), + ), + ] diff --git a/src/backend/InvenTree/report/models.py b/src/backend/InvenTree/report/models.py index 677500ea3b..1593ae03f9 100644 --- a/src/backend/InvenTree/report/models.py +++ b/src/backend/InvenTree/report/models.py @@ -27,7 +27,7 @@ import InvenTree.helpers import InvenTree.models import report.helpers import report.validators -from common.models import DataOutput, RenderChoices +from common.models import DataOutput, RenderChoices, UpdatedUserMixin from common.settings import get_global_setting from InvenTree.helpers_model import get_base_url from InvenTree.models import MetadataMixin @@ -189,7 +189,9 @@ class ReportContextExtension(TypedDict): merge: bool -class ReportTemplateBase(MetadataMixin, InvenTree.models.InvenTreeModel): +class ReportTemplateBase( + MetadataMixin, UpdatedUserMixin, InvenTree.models.InvenTreeModel +): """Base class for reports, labels.""" class ModelChoices(RenderChoices): @@ -205,8 +207,9 @@ class ReportTemplateBase(MetadataMixin, InvenTree.models.InvenTreeModel): def save(self, *args, **kwargs): """Perform additional actions when the report is saved.""" - # Increment revision number - self.revision += 1 + if kwargs.pop('increment_revision', True): + # Increment revision number + self.revision += 1 super().save() @@ -704,7 +707,7 @@ class LabelTemplate(TemplateUploadMixin, ReportTemplateBase): def get_context(self, instance, request=None, **kwargs): """Supply context data to the label template for rendering.""" base_context = super().get_context(instance, request, **kwargs) - label_context: LabelContextExtension = { # type: ignore[invalid-assignment] + label_context: LabelContextExtension = { 'width': self.width, 'height': self.height, 'page_style': None, diff --git a/src/backend/InvenTree/report/serializers.py b/src/backend/InvenTree/report/serializers.py index 5cf2e37e6b..1845724257 100644 --- a/src/backend/InvenTree/report/serializers.py +++ b/src/backend/InvenTree/report/serializers.py @@ -11,6 +11,7 @@ from InvenTree.serializers import ( InvenTreeAttachmentSerializerField, InvenTreeModelSerializer, ) +from users.serializers import UserSerializer class ReportSerializerBase(InvenTreeModelSerializer): @@ -27,6 +28,21 @@ class ReportSerializerBase(InvenTreeModelSerializer): if len(self.fields['model_type'].choices) == 0: self.fields['model_type'].choices = report.helpers.report_model_options() + def save(self, **kwargs): + """Override the save method to capture the user information.""" + user = self.context.get('request').user + + if not user or not user.is_authenticated: + raise PermissionError( + _('User must be authenticated to save report templates') + ) + + instance = super().save(**kwargs) + instance.updated_by = user + instance.save(increment_revision=False) + + return instance + @staticmethod def base_fields(): """Base serializer field set.""" @@ -41,6 +57,9 @@ class ReportSerializerBase(InvenTreeModelSerializer): 'enabled', 'revision', 'attach_to_model', + 'updated', + 'updated_by', + 'updated_by_detail', ] template = InvenTreeAttachmentSerializerField(required=True) @@ -56,6 +75,10 @@ class ReportSerializerBase(InvenTreeModelSerializer): allow_null=False, ) + updated_by_detail = UserSerializer( + source='updated_by', read_only=True, allow_null=True, many=False + ) + class ReportTemplateSerializer(ReportSerializerBase): """Serializer class for report template model.""" diff --git a/src/backend/InvenTree/report/templatetags/barcode.py b/src/backend/InvenTree/report/templatetags/barcode.py index 9a87adb3b3..d6641a0abe 100644 --- a/src/backend/InvenTree/report/templatetags/barcode.py +++ b/src/backend/InvenTree/report/templatetags/barcode.py @@ -33,7 +33,7 @@ def image_data(img, fmt='PNG') -> str: def clean_barcode(data): """Return a 'cleaned' string for encoding into a barcode / qrcode. - - This function runs the data through bleach, and removes any malicious HTML content. + - This function sanitizes the data using nh3, and removes any malicious HTML content. - Used to render raw barcode data into the rendered HTML templates """ from InvenTree.helpers import strip_html_tags diff --git a/src/backend/InvenTree/report/templatetags/report.py b/src/backend/InvenTree/report/templatetags/report.py index 5027915206..f923aa2551 100644 --- a/src/backend/InvenTree/report/templatetags/report.py +++ b/src/backend/InvenTree/report/templatetags/report.py @@ -2,15 +2,17 @@ import base64 import logging -import os from datetime import date, datetime from decimal import Decimal, InvalidOperation +from io import BytesIO +from pathlib import Path from typing import Any, Optional from django import template from django.apps.registry import apps -from django.conf import settings -from django.core.exceptions import ValidationError +from django.contrib.staticfiles.storage import staticfiles_storage +from django.core.exceptions import SuspiciousFileOperation, ValidationError +from django.core.files.storage import default_storage from django.db.models import Model from django.db.models.query import QuerySet from django.utils.safestring import SafeString, mark_safe @@ -145,32 +147,154 @@ def getkey(container: dict, key: str, backup_value: Optional[Any] = None) -> Any return container.get(key, backup_value) +def media_file_exists(path: Path | str) -> bool: + """Check if a media file exists at the specified path. + + Arguments: + path: The path to the media file, relative to the media storage root + + Returns: + True if the file exists, False otherwise + """ + if not path: + return False + + try: + return default_storage.exists(str(path)) + except SuspiciousFileOperation: + # Prevent path traversal attacks + raise ValidationError(_('Invalid media file path') + f": '{path}'") + + +def static_file_exists(path: Path | str) -> bool: + """Check if a static file exists at the specified path. + + Arguments: + path: The path to the static file, relative to the static storage root + + Returns: + True if the file exists, False otherwise + """ + if not path: + return False + + try: + return staticfiles_storage.exists(str(path)) + except SuspiciousFileOperation: + # Prevent path traversal attacks + raise ValidationError(_('Invalid static file path') + f": '{path}'") + + +def get_static_file_contents( + path: Path | str, raise_error: bool = False +) -> bytes | None: + """Return the contents of a static file. + + Arguments: + path: The path to the static file, relative to the static storage root + raise_error: If True, raise an error if the file cannot be found (default = False) + + Returns: + The contents of the static file, or None if the file cannot be found + """ + if not path: + if raise_error: + raise ValueError('No static file specified') + else: + return None + + if not staticfiles_storage.exists(path): + if raise_error: + raise FileNotFoundError(f'Static file does not exist: {path!s}') + else: + return None + + with staticfiles_storage.open(str(path)) as f: + file_data = f.read() + + return file_data + + +def get_media_file_contents( + path: Path | str, raise_error: bool = False +) -> bytes | None: + """Return the fully qualified file path to an uploaded media file. + + Arguments: + path: The path to the media file, relative to the media storage root + raise_error: If True, raise an error if the file cannot be found (default = False) + + Returns: + The contents of the media file, or None if the file cannot be found + + Raises: + FileNotFoundError: If the requested media file cannot be loaded + PermissionError: If the requested media file is outside of the media root + ValidationError: If the provided path is invalid + + Notes: + - The resulting path is resolved against the media root directory + """ + if not path: + if raise_error: + raise ValueError('No media file specified') + else: + return None + + if not media_file_exists(path): + if raise_error: + raise FileNotFoundError(f'Media file does not exist: {path!s}') + else: + return None + + # Load the file - and return the contents + with default_storage.open(str(path)) as f: + file_data = f.read() + + return file_data + + @register.simple_tag() -def asset(filename): +def asset(filename: str, raise_error: bool = False) -> str | None: """Return fully-qualified path for an upload report asset file. Arguments: filename: Asset filename (relative to the 'assets' media directory) + raise_error: If True, raise an error if the file cannot be found (default = False) Raises: FileNotFoundError: If file does not exist + ValueError: If an invalid filename is provided (e.g. empty string) + ValidationError: If the filename is invalid (e.g. path traversal attempt) """ + if not filename: + if raise_error: + raise ValueError('No asset file specified') + else: + return None + if type(filename) is SafeString: # Prepend an empty string to enforce 'stringiness' filename = '' + filename - # If in debug mode, return URL to the image, not a local file - debug_mode = get_global_setting('REPORT_DEBUG_MODE', cache=False) + # Remove any leading slash characters from the filename, to prevent path traversal attacks + filename = str(filename).lstrip('/\\') - # Test if the file actually exists - full_path = settings.MEDIA_ROOT.joinpath('report', 'assets', filename).resolve() + full_path = Path('report', 'assets', filename) - if not full_path.exists() or not full_path.is_file(): - raise FileNotFoundError(_('Asset file does not exist') + f": '{filename}'") + if not media_file_exists(full_path): + if raise_error: + raise FileNotFoundError(_('Asset file not found') + f": '{filename}'") + else: + return None - if debug_mode: - return os.path.join(settings.MEDIA_URL, 'report', 'assets', filename) - return f'file://{full_path}' + # In debug mode, return a web URL to the asset file (rather than a local file path) + if get_global_setting('REPORT_DEBUG_MODE', cache=False): + return default_storage.url(str(full_path)) + + storage_path = default_storage.path(str(full_path)) + + return f'file://{storage_path}' @register.simple_tag() @@ -182,61 +306,72 @@ def uploaded_image( width: Optional[int] = None, height: Optional[int] = None, rotate: Optional[float] = None, + raise_error: bool = False, **kwargs, ) -> str: """Return raw image data from an 'uploaded' image. Arguments: - filename: The filename of the image relative to the MEDIA_ROOT directory + filename: The filename of the image relative to the media root directory replace_missing: Optionally return a placeholder image if the provided filename does not exist (default = True) replacement_file: The filename of the placeholder image (default = 'blank_image.png') validate: Optionally validate that the file is a valid image file width: Optional width of the image height: Optional height of the image rotate: Optional rotation to apply to the image + raise_error: If True, raise an error if the file cannot be found (default = False) Returns: Binary image data to be rendered directly in a tag Raises: FileNotFoundError: If the file does not exist + ValueError: If an invalid filename is provided (e.g. empty string) """ if type(filename) is SafeString: # Prepend an empty string to enforce 'stringiness' filename = '' + filename + # Strip out any leading slash characters from the filename, to prevent path traversal attacks + filename = str(filename).lstrip('/\\') + # If in debug mode, return URL to the image, not a local file debug_mode = get_global_setting('REPORT_DEBUG_MODE', cache=False) - # Check if the file exists - if not filename: - exists = False - else: - try: - full_path = settings.MEDIA_ROOT.joinpath(filename).resolve() - exists = full_path.exists() and full_path.is_file() - except Exception: # pragma: no cover - exists = False # pragma: no cover - - if exists and validate and not InvenTree.helpers.TestIfImage(full_path): - logger.warning("File '%s' is not a valid image", filename) - exists = False + # Load image data - this will check if the file exists + exists = bool(filename) and media_file_exists(filename) if not exists and not replace_missing: raise FileNotFoundError(_('Image file not found') + f": '{filename}'") + if exists: + img_data = get_media_file_contents(filename, raise_error=raise_error) + + # Check if the image data is valid + if ( + img_data + and validate + and not InvenTree.helpers.TestIfImage(BytesIO(img_data)) + ): + logger.warning("File '%s' is not a valid image", filename) + img_data = None + exists = False + else: + # Load the backup image from the static files directory + replacement_file_path = Path('img', replacement_file) + img_data = get_static_file_contents( + replacement_file_path, raise_error=raise_error + ) + if debug_mode: # In debug mode, return a web path (rather than an encoded image blob) if exists: - return os.path.join(settings.MEDIA_URL, filename) - return os.path.join(settings.STATIC_URL, 'img', replacement_file) + return default_storage.url(filename) - elif not exists: - full_path = settings.STATIC_ROOT.joinpath('img', replacement_file).resolve() + return staticfiles_storage.url(str(Path('img', replacement_file))) - # Load the image, check that it is valid - if full_path.exists() and full_path.is_file(): - img = Image.open(full_path) + if img_data: + img = Image.open(BytesIO(img_data)) else: # A placeholder image showing that the image is missing img = Image.new('RGB', (64, 64), color='red') @@ -288,22 +423,15 @@ def encode_svg_image(filename: str) -> str: # Prepend an empty string to enforce 'stringiness' filename = '' + filename - # Check if the file exists + # Remove any leading slash characters from the filename, to prevent path traversal attacks + filename = str(filename).lstrip('/\\') + if not filename: - exists = False - else: - try: - full_path = settings.MEDIA_ROOT.joinpath(filename).resolve() - exists = full_path.exists() and full_path.is_file() - except Exception: - exists = False + raise FileNotFoundError(_('No image file specified')) - if not exists: - raise FileNotFoundError(_('Image file not found') + f": '{filename}'") - - # Read the file data - with open(full_path, 'rb') as f: - data = f.read() + # Read out the file contents + # Note: This will check if the file exists, and raise an error if it does not + data = get_media_file_contents(filename) # Return the base64-encoded data return 'data:image/svg+xml;charset=utf-8;base64,' + base64.b64encode(data).decode( @@ -323,8 +451,15 @@ def part_image(part: Part, preview: bool = False, thumbnail: bool = False, **kwa Raises: TypeError: If provided part is not a Part instance """ - if type(part) is not Part: + if not part or not isinstance(part, Part): raise TypeError(_('part_image tag requires a Part instance')) + + image_filename = InvenTree.helpers.image2name(part.image, preview, thumbnail) + + if kwargs.get('check_exists'): + if not media_file_exists(image_filename): + raise FileNotFoundError(_('Image file not found') + f": '{image_filename}'") + return uploaded_image( InvenTree.helpers.image2name(part.image, preview, thumbnail), **kwargs ) @@ -338,10 +473,10 @@ def parameter( Arguments: instance: A Model object - parameter_name: The name of the parameter to retrieve + parameter_name: The name of the parameter to retrieve (case insensitive) Returns: - A Parameter object, or None if not found + A Parameter object, or the provided default value if not found """ if instance is None: raise ValueError('parameter tag requires a valid Model instance') @@ -349,12 +484,46 @@ def parameter( if not isinstance(instance, Model) or not hasattr(instance, 'parameters'): raise TypeError("parameter tag requires a Model with 'parameters' attribute") - return ( - instance.parameters + # First try with exact match + if ( + parameter := instance.parameters .prefetch_related('template') .filter(template__name=parameter_name) .first() - ) + ): + return parameter + + # Next, try with case-insensitive match + if ( + parameter := instance.parameters + .prefetch_related('template') + .filter(template__name__iexact=parameter_name) + .first() + ): + return parameter + + return None + + +@register.simple_tag() +def parameter_value( + instance: Model, parameter_name: str, backup_value: Optional[Any] = None +) -> str: + """Return the value of a Parameter for the given part and parameter name. + + Arguments: + instance: A Model object + parameter_name: The name of the parameter to retrieve (case insensitive) + backup_value: A backup value to return if the parameter is not found + + Returns: + The value of the Parameter, or the backup_value if not found + """ + if param := parameter(instance, parameter_name): + return param.data + + # If the matching parameter is not found, return the backup value + return backup_value @register.simple_tag() diff --git a/src/backend/InvenTree/report/test_tags.py b/src/backend/InvenTree/report/test_tags.py index 337b46e6b2..abee2b09c8 100644 --- a/src/backend/InvenTree/report/test_tags.py +++ b/src/backend/InvenTree/report/test_tags.py @@ -14,7 +14,6 @@ from djmoney.money import Money from PIL import Image from common.models import InvenTreeSetting, Parameter, ParameterTemplate -from InvenTree.config import get_testfolder_dir from InvenTree.unit_test import InvenTreeTestCase from part.models import Part # TODO fix import: PartParameter, PartParameterTemplate from part.test_api import PartImageTestMixin @@ -62,7 +61,15 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): self.debug_mode(b) with self.assertRaises(FileNotFoundError): - report_tags.asset('bad_file.txt') + report_tags.asset('bad_file.txt', raise_error=True) + + # Test for missing file, no error + self.assertIsNone(report_tags.asset('missing.txt')) + + self.assertIsNone(report_tags.asset('')) + + with self.assertRaises(ValueError): + report_tags.asset('', raise_error=True) # Create an asset file asset_dir = settings.MEDIA_ROOT.joinpath('report', 'assets') @@ -81,7 +88,28 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): self.debug_mode(False) asset = report_tags.asset('test.txt') - self.assertEqual(asset, f'file://{asset_dir}/test.txt') + self.assertEqual(asset, f'file://{settings.MEDIA_ROOT}/report/assets/test.txt') + + # Test for attempted path traversal + with self.assertRaises(ValidationError): + report_tags.asset('../../../report/assets/test.txt') + + def test_file_access(self): + """Tests for media and static file access.""" + for fn in [None, '', '@@@@@@', 'fake_file.txt']: + self.assertFalse(report_tags.media_file_exists(fn)) + self.assertFalse(report_tags.static_file_exists(fn)) + + with self.assertRaises(FileNotFoundError): + report_tags.get_media_file_contents('dummy_file.txt', raise_error=True) + + with self.assertRaises(ValueError): + report_tags.get_static_file_contents(None, raise_error=True) + + # Try again, without throwing an error + self.assertIsNone( + report_tags.get_media_file_contents('dummy_file.txt', raise_error=False) + ) def test_uploaded_image(self): """Tests for retrieving uploaded images.""" @@ -148,6 +176,10 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): ) self.assertTrue(img.startswith('data:image/png;charset=utf-8;base64,')) + # Attempted path traversal + with self.assertRaises(ValidationError): + report_tags.uploaded_image('../../../part/images/test.jpg') + def test_part_image(self): """Unit tests for the 'part_image' tag.""" with self.assertRaises(TypeError): @@ -157,8 +189,10 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): self.create_test_image() obj.refresh_from_db() - report_tags.part_image(obj, preview=True) - report_tags.part_image(obj, thumbnail=True) + r = report_tags.part_image(obj, preview=True) + self.assertIn('data:image/png;charset=utf-8;base64,', r) + r = report_tags.part_image(obj, thumbnail=True) + self.assertIn('data:image/png;charset=utf-8;base64,', r) def test_company_image(self): """Unit tests for the 'company_image' tag.""" @@ -392,12 +426,16 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): def test_encode_svg_image(self): """Test the encode_svg_image template tag.""" # Generate smallest possible SVG for testing - svg_path = get_testfolder_dir() / 'part_image_123abc.png' + # Store it in the media directory + + img_path = 'part_image_123abc.png' + svg_path = settings.MEDIA_ROOT / img_path + with open(svg_path, 'w', encoding='utf8') as f: f.write(' QuerySet: @@ -3099,4 +3101,6 @@ class StockItemTestResult(InvenTree.models.InvenTreeMetadataModel): help_text=_('The timestamp of the test finish'), ) - date = models.DateTimeField(auto_now_add=True, editable=False) + date = models.DateTimeField( + default=InvenTree.helpers.current_time, verbose_name=_('Date') + ) diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index 11ac344e1e..5aa339e340 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -220,7 +220,16 @@ class StockItemTestResultSerializer( 'template', 'template_detail', ] - read_only_fields = ['pk', 'user', 'date'] + read_only_fields = ['pk'] + + def __init__(self, *args, **kwargs): + """Handle custom initialization for the serializer.""" + super().__init__(*args, **kwargs) + + if not self._is_importing: + # Unless we are importing data, mark the 'user' and 'date' fields as read-only + self.fields['user'].read_only = True + self.fields['date'].read_only = True user_detail = enable_filter( UserSerializer(source='user', read_only=True, allow_null=True), @@ -413,6 +422,8 @@ class StockItemSerializer( parent = serializers.PrimaryKeyRelatedField( many=False, read_only=True, + required=False, + allow_null=True, label=_('Parent Item'), help_text=_('Parent stock item'), ) @@ -516,7 +527,7 @@ class StockItemSerializer( queryset = queryset.annotate( expired=Case( When( - StockItem.EXPIRED_FILTER, + StockItem.get_expired_filter(), then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()), diff --git a/src/backend/InvenTree/stock/test_api.py b/src/backend/InvenTree/stock/test_api.py index cbaea852f9..e2a7b22b0c 100644 --- a/src/backend/InvenTree/stock/test_api.py +++ b/src/backend/InvenTree/stock/test_api.py @@ -1038,7 +1038,7 @@ class StockItemListTest(StockAPITestCase): # Note: While the export is quick on pgsql, it is still quite slow on sqlite3 with self.export_data( self.list_url, - max_query_count=50, + max_query_count=100, max_query_time=12.0, # Test time increased due to worker variability ) as data_file: data = self.process_csv(data_file) @@ -1417,12 +1417,19 @@ class StockItemTest(StockAPITestCase): """Test the default location functionality, if a 'location' is not specified in the creation request.""" # The part 'R_4K7_0603' (pk=4) has a default location specified + # Create a new StockItem instance response = self.post( self.list_url, data={'part': 4, 'quantity': 10}, expected_code=201 ) self.assertEqual(response.data[0]['location'], 2) + # Check that the item was associated with the correct user + item = StockItem.objects.get(pk=response.data[0]['pk']) + self.assertEqual(item.tracking_info_count, 1) + tracking = item.tracking_info.first() + self.assertEqual(tracking.user, self.user) + # What if we explicitly set the location to a different value? response = self.post( @@ -2006,6 +2013,33 @@ class StockItemTest(StockAPITestCase): self.assertEqual(tracking.deltas['status'], StockStatus.OK.value) self.assertEqual(tracking.deltas['status_logical'], StockStatus.OK.value) + def test_bulk_batch_change(self): + """Test that we can bulk-change batch code for a set of stock items.""" + url = reverse('api-stock-list') + + # Find the first 10 stock items + items = StockItem.objects.all()[:10] + self.assertEqual(len(items), 10) + + response = self.patch( + url, + data={'items': [item.pk for item in items], 'batch': 'NEW-BATCH-CODE'}, + max_query_count=300, + ) + + data = response.data + + self.assertEqual(data['success'], 'Updated 10 items') + self.assertEqual(len(data['items']), 10) + + for item in data['items']: + self.assertEqual(item['batch'], 'NEW-BATCH-CODE') + + # Check database items also + for item in items: + item.refresh_from_db() + self.assertEqual(item.batch, 'NEW-BATCH-CODE') + class StocktakeTest(StockAPITestCase): """Series of tests for the Stocktake API.""" @@ -2400,17 +2434,7 @@ class StockTestResultTest(StockAPITestCase): self.delete(url, {}, expected_code=400) # Now, let's delete all the newly created items with a single API request - # However, we will provide incorrect filters - response = self.delete( - url, {'items': tests, 'filters': {'stock_item': 10}}, expected_code=400 - ) - - self.assertEqual(StockItemTestResult.objects.count(), n + 50) - - # Try again, but with the correct filters this time - response = self.delete( - url, {'items': tests, 'filters': {'stock_item': 1}}, expected_code=200 - ) + response = self.delete(url, {'items': tests}, expected_code=200) self.assertEqual(StockItemTestResult.objects.count(), n) diff --git a/src/backend/InvenTree/users/api.py b/src/backend/InvenTree/users/api.py index 42201ed095..37434fbcff 100644 --- a/src/backend/InvenTree/users/api.py +++ b/src/backend/InvenTree/users/api.py @@ -367,49 +367,44 @@ class GetAuthToken(GenericAPIView): - Existing tokens are *never* exposed again via the API - Once the token is provided, it can be used for auth until it expires """ - if request.user.is_authenticated: - user = request.user - name = request.query_params.get('name', '') + if not request.user.is_authenticated: + raise exceptions.NotAuthenticated() # pragma: no cover - name = ApiToken.sanitize_name(name) + user = request.user + name = request.query_params.get('name', '') - today = datetime.date.today() + name = ApiToken.sanitize_name(name) - # Find existing token, which has not expired - token = ApiToken.objects.filter( - user=user, name=name, revoked=False, expiry__gte=today - ).first() + today = datetime.date.today() - if not token: - # User is authenticated, and requesting a token against the provided name. - token = ApiToken.objects.create(user=request.user, name=name) + # Find existing token, which has not expired + token = ApiToken.objects.filter( + user=user, name=name, revoked=False, expiry__gte=today + ).first() - logger.info( - "Created new API token for user '%s' (name='%s')", - user.username, - name, - ) + if not token: + # User is authenticated, and requesting a token against the provided name. + token = ApiToken.objects.create(user=request.user, name=name) + + logger.info( + "Created new API token for user '%s' (name='%s')", user.username, name + ) # Add some metadata about the request - token.set_metadata('user_agent', request.headers.get('user-agent', '')) - token.set_metadata('remote_addr', request.META.get('REMOTE_ADDR', '')) - token.set_metadata('remote_host', request.META.get('REMOTE_HOST', '')) - token.set_metadata('remote_user', request.META.get('REMOTE_USER', '')) - token.set_metadata('server_name', request.META.get('SERVER_NAME', '')) - token.set_metadata('server_port', request.META.get('SERVER_PORT', '')) + token.set_metadata('user_agent', request.headers.get('user-agent', '')) + token.set_metadata('remote_addr', request.META.get('REMOTE_ADDR', '')) + token.set_metadata('remote_host', request.META.get('REMOTE_HOST', '')) + token.set_metadata('remote_user', request.META.get('REMOTE_USER', '')) + token.set_metadata('server_name', request.META.get('SERVER_NAME', '')) + token.set_metadata('server_port', request.META.get('SERVER_PORT', '')) - data = {'token': token.key, 'name': token.name, 'expiry': token.expiry} + data = {'token': token.key, 'name': token.name, 'expiry': token.expiry} - # Ensure that the users session is logged in - if not get_user(request).is_authenticated: - login( - request, user, backend='django.contrib.auth.backends.ModelBackend' - ) + # Ensure that the users session is logged in + if not get_user(request).is_authenticated: + login(request, user, backend='django.contrib.auth.backends.ModelBackend') - return Response(data) - - else: - raise exceptions.NotAuthenticated() # pragma: no cover + return Response(data) class TokenMixin: diff --git a/src/backend/InvenTree/users/models.py b/src/backend/InvenTree/users/models.py index 3ead74515d..a89f3f921c 100644 --- a/src/backend/InvenTree/users/models.py +++ b/src/backend/InvenTree/users/models.py @@ -24,7 +24,7 @@ from rest_framework.authtoken.models import Token as AuthToken import InvenTree.helpers import InvenTree.models from common.settings import get_global_setting -from InvenTree.ready import isImportingData +from InvenTree.ready import isImportingData, isReadOnlyCommand from .ruleset import RULESET_CHOICES, get_ruleset_models @@ -463,7 +463,7 @@ class Owner(models.Model): def create_owner(sender, instance, **kwargs): """Callback function to create a new owner instance after either a new group or user instance is saved.""" # Ignore during data import process to avoid data duplication - if not isImportingData(): + if not isReadOnlyCommand() and not isImportingData(): Owner.create(obj=instance) @@ -600,6 +600,10 @@ class UserProfile(InvenTree.models.MetadataMixin): @receiver(post_save, sender=User) def create_or_update_user_profile(sender, instance, created, **kwargs): """Create or update user profile when user is saved.""" + # Disable profile creation if importing data from file or running a read-only command + if isReadOnlyCommand() or isImportingData(): + return + if created: UserProfile.objects.create(user=instance) instance.profile.save() @@ -629,6 +633,10 @@ def validate_primary_group_on_delete(sender, instance, **kwargs): @receiver(m2m_changed, sender=User.groups.through) def validate_primary_group_on_group_change(sender, instance, action, **kwargs): """Validate primary_group on user profiles when a group is added or removed.""" + # Disable user profile validation if importing data from file + if isImportingData(): + return + if action in ['post_add', 'post_remove']: profile = instance.profile if profile.primary_group and profile.primary_group not in instance.groups.all(): diff --git a/src/backend/InvenTree/users/serializers.py b/src/backend/InvenTree/users/serializers.py index 0fdd481137..0f58ebabb9 100644 --- a/src/backend/InvenTree/users/serializers.py +++ b/src/backend/InvenTree/users/serializers.py @@ -238,8 +238,21 @@ class ApiTokenSerializer(InvenTreeModelSerializer): def validate(self, data): """Validate the data for the serializer.""" + request_user = self.context['request'].user + if not request_user: + raise serializers.ValidationError( + _('User must be authenticated') + ) # pragma: no cover + if 'user' not in data: - data['user'] = self.context['request'].user + data['user'] = request_user + + # Only superusers can create tokens for other users + if data['user'] != request_user and not request_user.is_superuser: + raise serializers.ValidationError( + _('Only a superuser can create a token for another user') + ) + return super().validate(data) user_detail = UserSerializer(source='user', read_only=True) @@ -306,8 +319,8 @@ class ExtendedUserSerializer(UserSerializer): ) is_staff = serializers.BooleanField( - label=_('Staff'), - help_text=_('Does this user have staff permissions'), + label=_('Administrator'), + help_text=_('Does this user have administrative permissions'), required=False, ) @@ -380,6 +393,9 @@ class MeUserSerializer(ExtendedUserSerializer): but ensures that certain fields are read-only. """ + # Remove the 'group_ids' field, as this is not relevant for the 'me' endpoint + fields = [f for f in ExtendedUserSerializer.Meta.fields if f != 'group_ids'] + read_only_fields = [ *ExtendedUserSerializer.Meta.read_only_fields, 'is_active', @@ -389,6 +405,28 @@ class MeUserSerializer(ExtendedUserSerializer): profile = UserProfileSerializer(many=False, read_only=True) + # Redefine the fields from ExtendedUserSerializer, to ensure they are marked as read-only + is_staff = serializers.BooleanField( + label=_('Staff'), + help_text=_('Does this user have staff permissions'), + required=False, + read_only=True, + ) + + is_superuser = serializers.BooleanField( + label=_('Superuser'), + help_text=_('Is this user a superuser'), + required=False, + read_only=True, + ) + + is_active = serializers.BooleanField( + label=_('Active'), + help_text=_('Is this user account active'), + required=False, + read_only=True, + ) + def make_random_password(length=14): """Generate a random password of given length.""" diff --git a/src/backend/InvenTree/users/test_api.py b/src/backend/InvenTree/users/test_api.py index 473b70946b..bf42986c87 100644 --- a/src/backend/InvenTree/users/test_api.py +++ b/src/backend/InvenTree/users/test_api.py @@ -37,13 +37,14 @@ class UserAPITests(InvenTreeAPITestCase): fields['is_active']['help_text'], 'Is this user account active' ) - self.assertEqual(fields['is_staff']['label'], 'Staff') + self.assertEqual(fields['is_staff']['label'], 'Administrator') self.assertEqual( - fields['is_staff']['help_text'], 'Does this user have staff permissions' + fields['is_staff']['help_text'], + 'Does this user have administrative permissions', ) def test_api_url(self): - """Test the 'api_url attribute in related API endpoints. + """Test the 'api_url' attribute in related API endpoints. Ref: https://github.com/inventree/InvenTree/pull/10182 """ @@ -128,6 +129,19 @@ class UserAPITests(InvenTreeAPITestCase): self.assertIn('Only a superuser can adjust this field', str(response.data)) + # Try again, but with superuser access + self.user.is_superuser = True + self.user.save() + + response = self.post( + url, + data={**data, 'username': 'Superuser', 'is_superuser': True}, + expected_code=201, + ) + + self.assertEqual(response.data['username'], 'Superuser') + self.assertEqual(response.data['is_superuser'], True) + def test_user_detail(self): """Test the UserDetail API endpoint.""" user = User.objects.first() @@ -142,7 +156,7 @@ class UserAPITests(InvenTreeAPITestCase): self.get(url, expected_code=200) # Let's try to update the user - data = {'is_active': False, 'is_staff': False} + data = {'is_active': True, 'is_staff': False} self.patch(url, data=data, expected_code=403) @@ -157,6 +171,26 @@ class UserAPITests(InvenTreeAPITestCase): self.patch(url, data=data, expected_code=200) + # Try to change the "is_superuser" field - only a superuser can do this + data['is_superuser'] = True + response = self.patch(url, data=data, expected_code=403) + + self.assertIn( + 'You do not have permission to perform this action', str(response.data) + ) + + self.user.is_staff = True + self.user.is_superuser = True + self.user.save() + + for val in [True, False]: + data['is_staff'] = True + data['is_superuser'] = val + + response = self.patch(url, data=data, expected_code=200) + self.assertEqual(response.data['is_superuser'], val) + self.assertEqual(response.data['is_staff'], True) + # Try again, but logged out - expect no access to the endpoint self.logout() self.get(url, expected_code=401) @@ -228,6 +262,71 @@ class UserAPITests(InvenTreeAPITestCase): self.assertEqual(len(data['permissions']), len(perms) + len(build_perms)) + def test_me_endpoint(self): + """Test against the users /me/ endpoint.""" + url = reverse('api-user-me') + + # Test endpoint options + response = self.options(url, expected_code=200) + + # Check that particular fields are present, and have the correct attributes + fields = response.data['actions']['PUT'] + + for name in [ + 'pk', + 'username', + 'email', + 'groups', + 'is_active', + 'is_staff', + 'is_superuser', + ]: + self.assertIn(name, fields) + + for name in ['is_active', 'is_staff', 'is_superuser']: + self.assertTrue(fields[name]['read_only']) + + # Perform a GET request against the endpoint + response = self.get(url, expected_code=200) + + for field in [ + 'pk', + 'username', + 'email', + 'is_active', + 'is_staff', + 'is_superuser', + ]: + self.assertIn(field, response.data) + + # Change their own username + for name in ['Henry', 'Sally']: + response = self.patch(url, data={'username': name}, expected_code=200) + self.assertEqual(response.data['username'], name) + + # Defined starting point for the user + for v in [True, False]: + self.user.is_staff = v + self.user.is_superuser = v + self.user.save() + + for key in ['is_staff', 'is_superuser']: + for val in [True, False]: + response = self.patch(url, data={key: val}, expected_code=200) + + # Check that the field was *NOT CHANGED* + self.assertEqual(response.data[key], v) + + # Ensure we cannot change the "is_active" field either + response = self.patch(url, data={'is_active': False}, expected_code=200) + self.assertEqual(response.data['is_active'], True) + + self.user.is_active = False + self.user.save() + + # User cannot fetch their own details if they are not active + response = self.get(url, expected_code=401) + class SuperuserAPITests(InvenTreeAPITestCase): """Tests for user API endpoints that require superuser rights.""" @@ -244,7 +343,7 @@ class SuperuserAPITests(InvenTreeAPITestCase): resp = self.put(url, {'password': 1}, expected_code=400) self.assertContains(resp, 'This password is too short', status_code=400) - # now with overwerite + # now with overwrite resp = self.put( url, {'password': 1, 'override_warning': True}, expected_code=200 ) @@ -258,6 +357,8 @@ class SuperuserAPITests(InvenTreeAPITestCase): class UserTokenTests(InvenTreeAPITestCase): """Tests for user token functionality.""" + fixtures = ['users'] + def test_token_generation(self): """Test user token generation.""" url = reverse('api-token') @@ -396,8 +497,30 @@ class UserTokenTests(InvenTreeAPITestCase): self.client.logout() self.get(reverse('api-token'), expected_code=401) + def test_token_security(self): + """Test that token generation is only available to users with the correct permissions.""" + url = reverse('api-token-list') -class GroupDetialTests(InvenTreeAPITestCase): + # Try to generate a token for a different user (should fail) + response = self.post(url, data={'name': 'test', 'user': 1}, expected_code=400) + self.assertIn( + 'Only a superuser can create a token for another user', str(response.data) + ) + + # there should be no tokens created + self.assertEqual(ApiToken.objects.count(), 0) + + # now with superuser permissions + self.user.is_superuser = True + self.user.save() + + response = self.post(url, data={'name': 'test', 'user': 1}, expected_code=201) + self.assertIn('token', response.data) + + self.assertEqual(ApiToken.objects.count(), 1) + + +class GroupDetailTests(InvenTreeAPITestCase): """Tests for the GroupDetail API endpoint.""" fixtures = ['users'] diff --git a/src/backend/requirements-3.14.txt b/src/backend/requirements-3.14.txt index d56202ad6d..1da701f1d8 100644 --- a/src/backend/requirements-3.14.txt +++ b/src/backend/requirements-3.14.txt @@ -9,9 +9,9 @@ asgiref==3.11.1 \ # django-allauth # django-cors-headers # django-structlog -attrs==25.4.0 \ - --hash=sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11 \ - --hash=sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373 +attrs==26.1.0 \ + --hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \ + --hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32 # via # -c src/backend/requirements.txt # jsonschema @@ -89,28 +89,28 @@ bcrypt==5.0.0 \ # via # -c src/backend/requirements.txt # paramiko -bleach[css]==6.3.0 \ - --hash=sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22 \ - --hash=sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6 +bleach==4.1.0 \ + --hash=sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da \ + --hash=sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994 # via # -c src/backend/requirements.txt # django-markdownify -blessed==1.30.0 \ - --hash=sha256:4061a9f10dd22798716c2548ba36385af6a29d856c897f367c6ccc927e0b3a5a \ - --hash=sha256:4d547019d7b40fc5420ea2ba2bc180fdccc31d6715298e2b49ffa7b020d44667 +blessed==1.34.0 \ + --hash=sha256:3d17468c3d47e11ed8d6ca3da1270b8aba8ac8bd0a55a1f8189e4d04f223a1f0 \ + --hash=sha256:eb403f9ce2efab633bd1e7a05fbb35b979a7b9f213ddc41478dd55dd6999e8bf # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -boto3==1.42.58 \ - --hash=sha256:1bc5ff0b7a1a3f42b115481e269e1aada1d68bbfa80a989ac2882d51072907a3 \ - --hash=sha256:3a21b5bbc8bf8d6472a7ae7bdc77819b1f86f35d127f428f4603bed1b98122c0 +boto3==1.42.77 \ + --hash=sha256:95eb3ef693068586f70ca3f29c43701c34a9a73d0df413ea7eaff138efa4a6b9 \ + --hash=sha256:c6d9b05e5b86767d4c6ef762f155c891366e5951162f71d030e109fe531f4fd9 # via # -c src/backend/requirements.txt # django-anymail # django-storages -botocore==1.42.58 \ - --hash=sha256:3098178f4404cf85c8997ebb7948b3f267cff1dd191b08fc4ebb614ac1013a20 \ - --hash=sha256:55224d6a91afae0997e8bee62d1ef1ae2dcbc6c210516939b32a774b0b35bec5 +botocore==1.42.77 \ + --hash=sha256:807bc2c3825bec6f025506ceeba5f7f111a00de8d58f35c679ee16c8ff6e7b10 \ + --hash=sha256:cbb0ac410fab4aa0839a521329f970b271ec298d67465ed7fa7d095c0dad9f48 # via # -c src/backend/requirements.txt # boto3 @@ -316,173 +316,189 @@ cffi==2.0.0 \ # cryptography # pynacl # weasyprint -charset-normalizer==3.4.4 \ - --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ - --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ - --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ - --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ - --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \ - --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ - --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \ - --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \ - --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ - --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ - --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ - --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \ - --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ - --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \ - --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ - --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \ - --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ - --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ - --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ - --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ - --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \ - --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ - --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \ - --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ - --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \ - --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ - --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ - --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ - --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \ - --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ - --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ - --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ - --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \ - --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ - --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ - --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ - --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ - --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ - --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \ - --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ - --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ - --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ - --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ - --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ - --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ - --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \ - --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ - --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ - --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ - --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ - --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \ - --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \ - --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ - --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ - --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \ - --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ - --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ - --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ - --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ - --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ - --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ - --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ - --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ - --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ - --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ - --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ - --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ - --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ - --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ - --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ - --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \ - --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \ - --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ - --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ - --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ - --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ - --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \ - --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \ - --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ - --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ - --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \ - --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ - --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ - --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \ - --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ - --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ - --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \ - --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \ - --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \ - --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ - --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ - --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ - --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ - --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ - --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ - --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ - --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ - --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ - --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \ - --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \ - --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ - --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ - --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ - --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \ - --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ - --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ - --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ - --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ - --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \ - --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ - --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \ - --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ - --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 +charset-normalizer==3.4.6 \ + --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ + --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ + --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ + --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ + --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ + --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ + --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ + --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ + --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ + --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ + --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ + --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ + --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ + --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ + --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ + --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ + --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ + --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ + --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ + --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ + --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ + --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ + --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ + --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ + --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ + --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ + --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ + --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ + --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ + --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ + --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ + --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ + --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ + --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ + --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ + --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ + --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ + --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ + --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ + --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ + --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ + --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ + --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ + --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ + --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ + --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ + --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ + --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ + --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ + --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ + --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ + --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ + --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ + --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ + --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ + --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ + --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ + --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ + --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ + --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ + --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ + --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ + --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ + --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ + --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ + --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ + --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ + --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ + --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ + --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ + --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ + --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ + --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ + --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ + --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ + --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ + --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ + --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ + --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ + --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ + --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ + --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ + --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ + --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ + --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ + --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ + --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ + --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ + --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ + --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ + --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ + --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ + --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ + --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ + --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ + --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ + --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ + --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ + --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ + --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ + --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ + --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ + --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ + --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ + --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ + --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ + --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ + --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ + --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ + --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ + --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ + --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ + --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ + --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ + --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ + --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ + --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ + --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ + --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ + --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ + --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ + --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ + --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ + --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ + --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ + --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ + --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ + --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ + --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 # via # -c src/backend/requirements.txt # requests -cryptography==46.0.5 \ - --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ - --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ - --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ - --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ - --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ - --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ - --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ - --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ - --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ - --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ - --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ - --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ - --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ - --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ - --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ - --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ - --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ - --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ - --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ - --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ - --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ - --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ - --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ - --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ - --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ - --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ - --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ - --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ - --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ - --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ - --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ - --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ - --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ - --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ - --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ - --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ - --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ - --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ - --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ - --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ - --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ - --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ - --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ - --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ - --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ - --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ - --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ - --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ - --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 +cryptography==46.0.7 \ + --hash=sha256:04959522f938493042d595a736e7dbdff6eb6cc2339c11465b3ff89343b65f65 \ + --hash=sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832 \ + --hash=sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067 \ + --hash=sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de \ + --hash=sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4 \ + --hash=sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0 \ + --hash=sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b \ + --hash=sha256:3986ac1dee6def53797289999eabe84798ad7817f3e97779b5061a95b0ee4968 \ + --hash=sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef \ + --hash=sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b \ + --hash=sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4 \ + --hash=sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3 \ + --hash=sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308 \ + --hash=sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e \ + --hash=sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163 \ + --hash=sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f \ + --hash=sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee \ + --hash=sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77 \ + --hash=sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85 \ + --hash=sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99 \ + --hash=sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7 \ + --hash=sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83 \ + --hash=sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85 \ + --hash=sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006 \ + --hash=sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb \ + --hash=sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e \ + --hash=sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba \ + --hash=sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325 \ + --hash=sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d \ + --hash=sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1 \ + --hash=sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1 \ + --hash=sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2 \ + --hash=sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0 \ + --hash=sha256:d02c738dacda7dc2a74d1b2b3177042009d5cab7c7079db74afc19e56ca1b455 \ + --hash=sha256:d151173275e1728cf7839aaa80c34fe550c04ddb27b34f48c232193df8db5842 \ + --hash=sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457 \ + --hash=sha256:d3b99c535a9de0adced13d159c5a9cf65c325601aa30f4be08afd680643e9c15 \ + --hash=sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2 \ + --hash=sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c \ + --hash=sha256:e06acf3c99be55aa3b516397fe42f5855597f430add9c17fa46bf2e0fb34c9bb \ + --hash=sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5 \ + --hash=sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4 \ + --hash=sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902 \ + --hash=sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246 \ + --hash=sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022 \ + --hash=sha256:fc9ab8856ae6cf7c9358430e49b368f3108f050031442eaeb6b9d87e4dcf4e4f \ + --hash=sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e \ + --hash=sha256:fdd1736fed309b4300346f88f74cd120c27c56852c3838cab416e7a166f67298 \ + --hash=sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -504,9 +520,9 @@ defusedxml==0.7.1 \ # via # -c src/backend/requirements.txt # python3-openid -django==5.2.12 \ - --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ - --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb +django==5.2.13 \ + --hash=sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a \ + --hash=sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -615,9 +631,9 @@ django-maintenance-mode==0.22.0 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -django-markdownify==0.9.6 \ - --hash=sha256:9863b2bfa6d159ad1423dc93bf0d6eadc6413776de304049aa9fcfa5edd2ce1c \ - --hash=sha256:edcf47b2026d55a8439049d35c8b54e11066a4856c4fad1060e139cb3d2eee52 +django-markdownify==0.9.1 \ + --hash=sha256:06ff2994ff09ce030b50de8c6fc5b89b9c25a66796948aff55370716ca1233af \ + --hash=sha256:24ba68b8a5996b6ec9632d11a3fd2e7159cb7e6becd3104e0a9372b5a2a148ef # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -720,9 +736,9 @@ django-xforwardedfor-middleware==2.0 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -djangorestframework==3.16.1 \ - --hash=sha256:166809528b1aced0a17dc66c24492af18049f2c9420dbd0be29422029cfc3ff7 \ - --hash=sha256:33a59f47fb9c85ede792cbf88bde71893bcda0667bc573f784649521f1102cec +djangorestframework==3.17.1 \ + --hash=sha256:a6def5f447fe78ff853bff1d47a3c59bf38f5434b031780b351b0c73a62db1a5 \ + --hash=sha256:c3c74dd3e83a5a3efc37b3c18d92bd6f86a6791c7b7d4dff62bb068500e76457 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -816,63 +832,63 @@ flexparser==0.4 \ # via # -c src/backend/requirements.txt # pint -fonttools[woff]==4.61.1 \ - --hash=sha256:0de30bfe7745c0d1ffa2b0b7048fb7123ad0d71107e10ee090fa0b16b9452e87 \ - --hash=sha256:10d88e55330e092940584774ee5e8a6971b01fc2f4d3466a1d6c158230880796 \ - --hash=sha256:11f35ad7805edba3aac1a3710d104592df59f4b957e30108ae0ba6c10b11dd75 \ - --hash=sha256:15acc09befd16a0fb8a8f62bc147e1a82817542d72184acca9ce6e0aeda9fa6d \ - --hash=sha256:17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371 \ - --hash=sha256:2180f14c141d2f0f3da43f3a81bc8aa4684860f6b0e6f9e165a4831f24e6a23b \ - --hash=sha256:21e7c8d76f62ab13c9472ccf74515ca5b9a761d1bde3265152a6dc58700d895b \ - --hash=sha256:41a7170d042e8c0024703ed13b71893519a1a6d6e18e933e3ec7507a2c26a4b2 \ - --hash=sha256:41ed4b5ec103bd306bb68f81dc166e77409e5209443e5773cb4ed837bcc9b0d3 \ - --hash=sha256:497c31ce314219888c0e2fce5ad9178ca83fe5230b01a5006726cdf3ac9f24d9 \ - --hash=sha256:4c1b526c8d3f615a7b1867f38a9410849c8f4aef078535742198e942fba0e9bd \ - --hash=sha256:4d7092bb38c53bbc78e9255a59158b150bcdc115a1e3b3ce0b5f267dc35dd63c \ - --hash=sha256:4f5686e1fe5fce75d82d93c47a438a25bf0d1319d2843a926f741140b2b16e0c \ - --hash=sha256:58b0ee0ab5b1fc9921eccfe11d1435added19d6494dde14e323f25ad2bc30c56 \ - --hash=sha256:5ce02f38a754f207f2f06557523cd39a06438ba3aafc0639c477ac409fc64e37 \ - --hash=sha256:5fade934607a523614726119164ff621e8c30e8fa1ffffbbd358662056ba69f0 \ - --hash=sha256:5fe9fd43882620017add5eabb781ebfbc6998ee49b35bd7f8f79af1f9f99a958 \ - --hash=sha256:64102ca87e84261419c3747a0d20f396eb024bdbeb04c2bfb37e2891f5fadcb5 \ - --hash=sha256:664c5a68ec406f6b1547946683008576ef8b38275608e1cee6c061828171c118 \ - --hash=sha256:6675329885c44657f826ef01d9e4fb33b9158e9d93c537d84ad8399539bc6f69 \ - --hash=sha256:75c1a6dfac6abd407634420c93864a1e274ebc1c7531346d9254c0d8f6ca00f9 \ - --hash=sha256:75da8f28eff26defba42c52986de97b22106cb8f26515b7c22443ebc9c2d3261 \ - --hash=sha256:77efb033d8d7ff233385f30c62c7c79271c8885d5c9657d967ede124671bbdfb \ - --hash=sha256:78a7d3ab09dc47ac1a363a493e6112d8cabed7ba7caad5f54dbe2f08676d1b47 \ - --hash=sha256:7c7db70d57e5e1089a274cbb2b1fd635c9a24de809a231b154965d415d6c6d24 \ - --hash=sha256:8c56c488ab471628ff3bfa80964372fc13504ece601e0d97a78ee74126b2045c \ - --hash=sha256:91669ccac46bbc1d09e9273546181919064e8df73488ea087dcac3e2968df9ba \ - --hash=sha256:9b666a475a65f4e839d3d10473fad6d47e0a9db14a2f4a224029c5bfde58ad2c \ - --hash=sha256:9cfef3ab326780c04d6646f68d4b4742aae222e8b8ea1d627c74e38afcbc9d91 \ - --hash=sha256:a13fc8aeb24bad755eea8f7f9d409438eb94e82cf86b08fe77a03fbc8f6a96b1 \ - --hash=sha256:a75c301f96db737e1c5ed5fd7d77d9c34466de16095a266509e13da09751bd19 \ - --hash=sha256:a76d4cb80f41ba94a6691264be76435e5f72f2cb3cab0b092a6212855f71c2f6 \ - --hash=sha256:aed04cabe26f30c1647ef0e8fbb207516fd40fe9472e9439695f5c6998e60ac5 \ - --hash=sha256:b148b56f5de675ee16d45e769e69f87623a4944f7443850bf9a9376e628a89d2 \ - --hash=sha256:b501c862d4901792adaec7c25b1ecc749e2662543f68bb194c42ba18d6eec98d \ - --hash=sha256:b846a1fcf8beadeb9ea4f44ec5bdde393e2f1569e17d700bfc49cd69bde75881 \ - --hash=sha256:b931ae8f62db78861b0ff1ac017851764602288575d65b8e8ff1963fed419063 \ - --hash=sha256:c33ab3ca9d3ccd581d58e989d67554e42d8d4ded94ab3ade3508455fe70e65f7 \ - --hash=sha256:c6604b735bb12fef8e0efd5578c9fb5d3d8532d5001ea13a19cddf295673ee09 \ - --hash=sha256:d8db08051fc9e7d8bc622f2112511b8107d8f27cd89e2f64ec45e9825e8288da \ - --hash=sha256:d9203500f7c63545b4ce3799319fe4d9feb1a1b89b28d3cb5abd11b9dd64147e \ - --hash=sha256:dc492779501fa723b04d0ab1f5be046797fee17d27700476edc7ee9ae535a61e \ - --hash=sha256:e6bcdf33aec38d16508ce61fd81838f24c83c90a1d1b8c68982857038673d6b8 \ - --hash=sha256:e76ce097e3c57c4bcb67c5aa24a0ecdbd9f74ea9219997a707a4061fbe2707aa \ - --hash=sha256:eff1ac3cc66c2ac7cda1e64b4e2f3ffef474b7335f92fc3833fc632d595fcee6 \ - --hash=sha256:f3cb4a569029b9f291f88aafc927dd53683757e640081ca8c412781ea144565e \ - --hash=sha256:f79b168428351d11e10c5aeb61a74e1851ec221081299f4cf56036a95431c43a \ - --hash=sha256:fa646ecec9528bef693415c79a86e733c70a4965dd938e9a226b0fc64c9d2e6c \ - --hash=sha256:fe2efccb324948a11dd09d22136fe2ac8a97d6c1347cf0b58a911dcd529f66b7 \ - --hash=sha256:fff4f534200a04b4a36e7ae3cb74493afe807b517a09e99cb4faa89a34ed6ecd +fonttools[woff]==4.62.1 \ + --hash=sha256:0aa72c43a601cfa9273bb1ae0518f1acadc01ee181a6fc60cd758d7fdadffc04 \ + --hash=sha256:0b3ae47e8636156a9accff64c02c0924cbebad62854c4a6dbdc110cd5b4b341a \ + --hash=sha256:12859ff0b47dd20f110804c3e0d0970f7b832f561630cd879969011541a464a9 \ + --hash=sha256:149f7d84afca659d1a97e39a4778794a2f83bf344c5ee5134e09995086cc2392 \ + --hash=sha256:1596aeaddf7f78e21e68293c011316a25267b3effdaccaf4d59bc9159d681b82 \ + --hash=sha256:19177c8d96c7c36359266e571c5173bcee9157b59cfc8cb0153c5673dc5a3a7d \ + --hash=sha256:1c5c25671ce8805e0d080e2ffdeca7f1e86778c5cbfbeae86d7f866d8830517b \ + --hash=sha256:1eecc128c86c552fb963fe846ca4e011b1be053728f798185a1687502f6d398e \ + --hash=sha256:268abb1cb221e66c014acc234e872b7870d8b5d4657a83a8f4205094c32d2416 \ + --hash=sha256:2d850f66830a27b0d498ee05adb13a3781637b1826982cd7e2b3789ef0cc71ae \ + --hash=sha256:2e7abd2b1e11736f58c1de27819e1955a53267c21732e78243fa2fa2e5c1e069 \ + --hash=sha256:403d28ce06ebfc547fbcb0cb8b7f7cc2f7a2d3e1a67ba9a34b14632df9e080f9 \ + --hash=sha256:40975849bac44fb0b9253d77420c6d8b523ac4dcdcefeff6e4d706838a5b80f7 \ + --hash=sha256:486f32c8047ccd05652aba17e4a8819a3a9d78570eb8a0e3b4503142947880ed \ + --hash=sha256:49a445d2f544ce4a69338694cad575ba97b9a75fff02720da0882d1a73f12800 \ + --hash=sha256:59b372b4f0e113d3746b88985f1c796e7bf830dd54b28374cd85c2b8acd7583e \ + --hash=sha256:5a648bde915fba9da05ae98856987ca91ba832949a9e2888b48c47ef8b96c5a9 \ + --hash=sha256:5f37df1cac61d906e7b836abe356bc2f34c99d4477467755c216b72aa3dc748b \ + --hash=sha256:6706d1cb1d5e6251a97ad3c1b9347505c5615c112e66047abbef0f8545fa30d1 \ + --hash=sha256:68959f5fc58ed4599b44aad161c2837477d7f35f5f79402d97439974faebfebe \ + --hash=sha256:6acb4109f8bee00fec985c8c7afb02299e35e9c94b57287f3ea542f28bd0b0a7 \ + --hash=sha256:7487782e2113861f4ddcc07c3436450659e3caa5e470b27dc2177cade2d8e7fd \ + --hash=sha256:7aa21ff53e28a9c2157acbc44e5b401149d3c9178107130e82d74ceb500e5056 \ + --hash=sha256:7bca7a1c1faf235ffe25d4f2e555246b4750220b38de8261d94ebc5ce8a23c23 \ + --hash=sha256:8d337fdd49a79b0d51c4da87bc38169d21c3abbf0c1aa9367eff5c6656fb6dae \ + --hash=sha256:8f8fca95d3bb3208f59626a4b0ea6e526ee51f5a8ad5d91821c165903e8d9260 \ + --hash=sha256:90365821debbd7db678809c7491ca4acd1e0779b9624cdc6ddaf1f31992bf974 \ + --hash=sha256:92bb00a947e666169c99b43753c4305fc95a890a60ef3aeb2a6963e07902cc87 \ + --hash=sha256:93c316e0f5301b2adbe6a5f658634307c096fd5aae60a5b3412e4f3e1728ab24 \ + --hash=sha256:942b03094d7edbb99bdf1ae7e9090898cad7bf9030b3d21f33d7072dbcb51a53 \ + --hash=sha256:9c125ffa00c3d9003cdaaf7f2c79e6e535628093e14b5de1dccb08859b680936 \ + --hash=sha256:9dde91633f77fa576879a0c76b1d89de373cae751a98ddf0109d54e173b40f14 \ + --hash=sha256:9e7863e10b3de72376280b515d35b14f5eeed639d1aa7824f4cf06779ec65e42 \ + --hash=sha256:a24decd24d60744ee8b4679d38e88b8303d86772053afc29b19d23bb8207803c \ + --hash=sha256:a5d8825e1140f04e6c99bb7d37a9e31c172f3bc208afbe02175339e699c710e1 \ + --hash=sha256:aa69d10ed420d8121118e628ad47d86e4caa79ba37f968597b958f6cceab7eca \ + --hash=sha256:ad5cca75776cd453b1b035b530e943334957ae152a36a88a320e779d61fc980c \ + --hash=sha256:b4e0fcf265ad26e487c56cb12a42dffe7162de708762db951e1b3f755319507d \ + --hash=sha256:b820fcb92d4655513d8402d5b219f94481c4443d825b4372c75a2072aa4b357a \ + --hash=sha256:bd13b7999d59c5eb1c2b442eb2d0c427cb517a0b7a1f5798fc5c9e003f5ff782 \ + --hash=sha256:bdfe592802ef939a0e33106ea4a318eeb17822c7ee168c290273cbd5fabd746c \ + --hash=sha256:c05557a78f8fa514da0f869556eeda40887a8abc77c76ee3f74cf241778afd5a \ + --hash=sha256:c22b1014017111c401469e3acc5433e6acf6ebcc6aa9efb538a533c800971c79 \ + --hash=sha256:c9b9e288b4da2f64fd6180644221749de651703e8d0c16bd4b719533a3a7d6e3 \ + --hash=sha256:d241cdc4a67b5431c6d7f115fdf63335222414995e3a1df1a41e1182acd4bcc7 \ + --hash=sha256:e54c75fd6041f1122476776880f7c3c3295ffa31962dc6ebe2543c00dca58b5d \ + --hash=sha256:e8514f4924375f77084e81467e63238b095abda5107620f49421c368a6017ed2 \ + --hash=sha256:ee91628c08e76f77b533d65feb3fbe6d9dad699f95be51cf0d022db94089cdc4 \ + --hash=sha256:ef46db46c9447103b8f3ff91e8ba009d5fe181b1920a83757a5762551e32bb68 \ + --hash=sha256:fa1d16210b6b10a826d71bed68dd9ec24a9e218d5a5e2797f37c573e7ec215ca # via # -c src/backend/requirements.txt # weasyprint -googleapis-common-protos==1.72.0 \ - --hash=sha256:4299c5a82d5ae1a9702ada957347726b167f9f8d1fc352477702a1e851ff4038 \ - --hash=sha256:e55a601c1b32b52d7a3e65f43563e2aa61bcd737998ee672ac9b951cd49319f5 +googleapis-common-protos==1.73.1 \ + --hash=sha256:13114f0e9d2391756a0194c3a8131974ed7bffb06086569ba193364af59163b6 \ + --hash=sha256:e51f09eb0a43a8602f5a915870972e6b4a394088415c79d79605a46d8e826ee8 # via # -c src/backend/requirements.txt # opentelemetry-exporter-otlp-proto-grpc @@ -943,15 +959,15 @@ grpcio==1.78.0 \ # -c src/backend/requirements.txt # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc -gunicorn==25.1.0 \ - --hash=sha256:1426611d959fa77e7de89f8c0f32eed6aa03ee735f98c01efba3e281b1c47616 \ - --hash=sha256:d0b1236ccf27f72cfe14bce7caadf467186f19e865094ca84221424e839b8b8b +gunicorn==25.3.0 \ + --hash=sha256:cacea387dab08cd6776501621c295a904fe8e3b7aae9a1a3cbb26f4e7ed54660 \ + --hash=sha256:f74e1b2f9f76f6cd1ca01198968bd2dd65830edc24b6e8e4d78de8320e2fe889 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -icalendar==7.0.2 \ - --hash=sha256:ad31a5825b39522a30b073c6ced3ffcdf6c02cbb7dab69ba2e4de32ddbf77cc9 \ - --hash=sha256:de844ff5cde32f539bea7644e36d8494032a926b933bedb92621f2f239760806 +icalendar==7.0.3 \ + --hash=sha256:8c9fea6d3a89671bba8b6938d8565b4d0ec465c6a2796ef0f92790dcb9e627cd \ + --hash=sha256:95027ece087ab87184d765f03761f25875821f74cdd18d3b57e9c868216d8fde # via # -c src/backend/requirements.txt # django-ical @@ -1011,9 +1027,9 @@ jsonschema-specifications==2025.9.1 \ # via # -c src/backend/requirements.txt # jsonschema -jwcrypto==1.5.6 \ - --hash=sha256:150d2b0ebbdb8f40b77f543fb44ffd2baeff48788be71f67f03566692fd55789 \ - --hash=sha256:771a87762a0c081ae6166958a954f80848820b2ab066937dc8b8379d65b1b039 +jwcrypto==1.5.7 \ + --hash=sha256:70204d7cca406eda8c82352e3c41ba2d946610dafd19e54403f0a1f4f18633c6 \ + --hash=sha256:729463fefe28b6de5cf1ebfda3e94f1a1b41d2799148ef98a01cb9678ebe2bb0 # via # -c src/backend/requirements.txt # django-oauth-toolkit @@ -1261,6 +1277,37 @@ markupsafe==3.0.3 \ # via # -c src/backend/requirements.txt # jinja2 +nh3==0.3.4 \ + --hash=sha256:07999b998bf89692738f15c0eac76a416382932f855709e0b7488b595c30ec89 \ + --hash=sha256:0961a27dc2057c38d0364cb05880e1997ae1c80220cbc847db63213720b8f304 \ + --hash=sha256:0d825722a1e8cbc87d7ca1e47ffb1d2a6cf343ad4c1b8465becf7cadcabcdfd0 \ + --hash=sha256:18a2e44ccb29cbb45071b8f3f2dab9ebfb41a6516f328f91f1f1fd18196239a4 \ + --hash=sha256:3390e4333883673a684ce16c1716b481e91782d6f56dec5c85fed9feedb23382 \ + --hash=sha256:41e46b3499918ab6128b6421677b316e79869d0c140da24069d220a94f4e72d1 \ + --hash=sha256:43ad4eedee7e049b9069bc015b7b095d320ed6d167ecec111f877de1540656e9 \ + --hash=sha256:47d749d99ae005ab19517224140b280dd56e77b33afb82f9b600e106d0458003 \ + --hash=sha256:4aa8b43e68c26b68069a3b6cef09de166d1d7fa140cf8d77e409a46cbf742e44 \ + --hash=sha256:554cc2bab281758e94d770c3fb0bf2d8be5fb403ef6b2e8841dd7c1615df7a0f \ + --hash=sha256:72e4e9ca1c4bd41b4a28b0190edc2e21e3f71496acd36a0162858e1a28db3d7e \ + --hash=sha256:75643c22f5092d8e209f766ee8108c400bc1e44760fc94d2d638eb138d18f853 \ + --hash=sha256:7cae217f031809321db962cd7e092bda8d4e95a87f78c0226628fa6c2ea8ebc5 \ + --hash=sha256:80b955d802bf365bd42e09f6c3d64567dce777d20e97968d94b3e9d9e99b265e \ + --hash=sha256:87dac8d611b4a478400e0821a13b35770e88c266582f065e7249d6a37b0f86e8 \ + --hash=sha256:883d5a6d6ee8078c4afc8e96e022fe579c4c265775ff6ee21e39b8c542cabab3 \ + --hash=sha256:8b61058f34c2105d44d2a4d4241bacf603a1ef5c143b08766bbd0cf23830118f \ + --hash=sha256:8d697e19f2995b337f648204848ac3a528eaafffc39e7ce4ac6b7a2fbe6c84af \ + --hash=sha256:9337517edb7c10228252cce2898e20fb3d77e32ffaccbb3c66897927d74215a0 \ + --hash=sha256:96709a379997c1b28c8974146ca660b0dcd3794f4f6d50c1ea549bab39ac6ade \ + --hash=sha256:c10b1f0c741e257a5cb2978d6bac86e7c784ab20572724b20c6402c2e24bce75 \ + --hash=sha256:ca90397c8d36c1535bf1988b2bed006597337843a164c7ec269dc8813f37536b \ + --hash=sha256:d866701affe67a5171b916b5c076e767a74c6a9efb7fb2006eb8d3c5f9a293d5 \ + --hash=sha256:d8bebcb20ab4b91858385cd98fe58046ec4a624275b45ef9b976475604f45b49 \ + --hash=sha256:dbe76feaa44e2ef9436f345016012a591550e77818876a8de5c8bc2a248e08df \ + --hash=sha256:f5f214618ad5eff4f2a6b13a8d4da4d9e7f37c569d90a13fb9f0caaf7d04fe21 \ + --hash=sha256:f987cb56458323405e8e5ea827e1befcf141ffa0c0ac797d6d02e6b646056d9a + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in oauthlib==3.3.1 \ --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 @@ -1274,9 +1321,9 @@ openpyxl==3.1.5 \ # via # -c src/backend/requirements.txt # tablib -opentelemetry-api==1.39.1 \ - --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ - --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c +opentelemetry-api==1.40.0 \ + --hash=sha256:159be641c0b04d11e9ecd576906462773eb97ae1b657730f0ecf64d32071569f \ + --hash=sha256:82dd69331ae74b06f6a874704be0cfaa49a1650e1537d4a813b86ecef7d0ecf9 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -1294,34 +1341,34 @@ opentelemetry-api==1.39.1 \ # opentelemetry-instrumentation-wsgi # opentelemetry-sdk # opentelemetry-semantic-conventions -opentelemetry-exporter-otlp==1.39.1 \ - --hash=sha256:68ae69775291f04f000eb4b698ff16ff685fdebe5cb52871bc4e87938a7b00fe \ - --hash=sha256:7cf7470e9fd0060c8a38a23e4f695ac686c06a48ad97f8d4867bc9b420180b9c +opentelemetry-exporter-otlp==1.40.0 \ + --hash=sha256:48c87e539ec9afb30dc443775a1334cc5487de2f72a770a4c00b1610bf6c697d \ + --hash=sha256:7caa0870b95e2fcb59d64e16e2b639ecffb07771b6cd0000b5d12e5e4fef765a # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -opentelemetry-exporter-otlp-proto-common==1.39.1 \ - --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ - --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 +opentelemetry-exporter-otlp-proto-common==1.40.0 \ + --hash=sha256:1cbee86a4064790b362a86601ee7934f368b81cd4cc2f2e163902a6e7818a0fa \ + --hash=sha256:7081ff453835a82417bf38dccf122c827c3cbc94f2079b03bba02a3165f25149 # via # -c src/backend/requirements.txt # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-exporter-otlp-proto-grpc==1.39.1 \ - --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ - --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 +opentelemetry-exporter-otlp-proto-grpc==1.40.0 \ + --hash=sha256:2aa0ca53483fe0cf6405087a7491472b70335bc5c7944378a0a8e72e86995c52 \ + --hash=sha256:bd4015183e40b635b3dab8da528b27161ba83bf4ef545776b196f0fb4ec47740 # via # -c src/backend/requirements.txt # opentelemetry-exporter-otlp -opentelemetry-exporter-otlp-proto-http==1.39.1 \ - --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ - --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 +opentelemetry-exporter-otlp-proto-http==1.40.0 \ + --hash=sha256:a8d1dab28f504c5d96577d6509f80a8150e44e8f45f82cdbe0e34c99ab040069 \ + --hash=sha256:db48f5e0f33217588bbc00274a31517ba830da576e59503507c839b38fa0869c # via # -c src/backend/requirements.txt # opentelemetry-exporter-otlp -opentelemetry-instrumentation==0.60b1 \ - --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ - --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a +opentelemetry-instrumentation==0.61b0 \ + --hash=sha256:92a93a280e69788e8f88391247cc530fd81f16f2b011979d4d6398f805cfbc63 \ + --hash=sha256:cb21b48db738c9de196eba6b805b4ff9de3b7f187e4bbf9a466fa170514f1fc7 # via # -c src/backend/requirements.txt # opentelemetry-instrumentation-dbapi @@ -1333,82 +1380,82 @@ opentelemetry-instrumentation==0.60b1 \ # opentelemetry-instrumentation-sqlite3 # opentelemetry-instrumentation-system-metrics # opentelemetry-instrumentation-wsgi -opentelemetry-instrumentation-dbapi==0.60b1 \ - --hash=sha256:5577189f678de5b9828c930c8fb72e8f1999b304131777b60099e5c4b3948193 \ - --hash=sha256:a239d328249b86fba5e42900b98bf31ee99c07092530feca18afde92c600f901 +opentelemetry-instrumentation-dbapi==0.61b0 \ + --hash=sha256:02fa800682c1de87dcad0e59f2092b3b6fb8b8ea0636518f989e1166b418dcb9 \ + --hash=sha256:8f762c39c8edd20c6aef3282550a2cfbfec76c3f431bf5c36327dcf9ece2e5a0 # via # -c src/backend/requirements.txt # opentelemetry-instrumentation-psycopg # opentelemetry-instrumentation-pymysql # opentelemetry-instrumentation-sqlite3 -opentelemetry-instrumentation-django==0.60b1 \ - --hash=sha256:3f6b4ba201eee35406dab965b254eed0c64fa1ef42e4a7b0296ad1b30e8e3f81 \ - --hash=sha256:765b69c7ccdea7e9ebfd0b9e68387956b8f74816f3e39775d5b06a20f16b0522 +opentelemetry-instrumentation-django==0.61b0 \ + --hash=sha256:26c1b0b325a9783d4a2f4df660ba05cf929c3eda2ae9b07916b649bb44e1c5b6 \ + --hash=sha256:9885154dc128578de0e6b5ce49e965c786f8ab071175bec005dcd454510be951 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -opentelemetry-instrumentation-psycopg==0.60b1 \ - --hash=sha256:67fa627561f00b903020843b9254a1be6f3f8c64501033afe629a574a2325ec2 \ - --hash=sha256:c13a81a898307ebdaa8aa4a0ac17753cb308270fcb07a17a857f74b6021b5a12 +opentelemetry-instrumentation-psycopg==0.61b0 \ + --hash=sha256:74e9fed3802945f7ae335cffc30fd18cf58c34a4d0619315f799fa21eb5c74ff \ + --hash=sha256:a3e242cad56c0ad4f4f872017c73ce7e6c7012081dda6bd0d776c127fedc358a # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -opentelemetry-instrumentation-pymysql==0.60b1 \ - --hash=sha256:3f3b237a7666600a5e9186053acb10df302c61dc7113430cb1b2f7d1f24f8971 \ - --hash=sha256:bc62a5089a9f5216b027fc9a09253404e7dc325dbc776d49ab41fd2c787b4667 +opentelemetry-instrumentation-pymysql==0.61b0 \ + --hash=sha256:00aca55c3fd767ebe484affa2f0c2f47edd4095038b509c6aca1a4cfed78af15 \ + --hash=sha256:60ba66a806e4664308bd86fe45f329a6f3bb520c3e9759f68f379b7c9466047f # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -opentelemetry-instrumentation-redis==0.60b1 \ - --hash=sha256:33bef0ff9af6f2d88de90c1cd7e25675c10a16d4f9ee5ae7592b28bb08b78139 \ - --hash=sha256:ecafa8f81c88917b59f0d842fb3d157f3a8edc71fb4b85bebca3bc19432ce7b8 +opentelemetry-instrumentation-redis==0.61b0 \ + --hash=sha256:8d4e850bbb5f8eeafa44c0eac3a007990c7125de187bc9c3659e29ff7e091172 \ + --hash=sha256:ae0fbb56be9a641e621d55b02a7d62977a2c77c5ee760addd79b9b266e46e523 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -opentelemetry-instrumentation-requests==0.60b1 \ - --hash=sha256:9a1063c16c44a3ba6e81870c4fa42a0fac3ecef5a4d60a11d0976eec9046f3d4 \ - --hash=sha256:eec9fac3fab84737f663a2e08b12cb095b4bd67643b24587a8ecfa3cf4d0ca4c +opentelemetry-instrumentation-requests==0.61b0 \ + --hash=sha256:15f879ce8fb206bd7e6fdc61663ea63481040a845218c0cf42902ce70bd7e9d9 \ + --hash=sha256:cce19b379949fe637eb73ba39b02c57d2d0805447ca6d86534aa33fcb141f683 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -opentelemetry-instrumentation-sqlite3==0.60b1 \ - --hash=sha256:7666853b9df186b81e587320aaa03da3f1ce46ba9277b62d8ea20a745886031c \ - --hash=sha256:d716b9d89d31dc426ccedefcdbf96cba1897dfe020d21e5e5ea82a782d03e1d6 +opentelemetry-instrumentation-sqlite3==0.61b0 \ + --hash=sha256:202a18e7f9d231bfa44771fdb068bff16f24a6fa5e424a0df4d9232b1a818693 \ + --hash=sha256:96d4f0fa35ba7ee9aa683aa17726cb358c8029cc7b3cf55668ccc77254c29ca5 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -opentelemetry-instrumentation-system-metrics==0.60b1 \ - --hash=sha256:21fb040ed6cfabc8ca97c63548fd01689f7ec92c64bbc6cfd08f30489a336fc6 \ - --hash=sha256:b9c3a40f31f20c694c386bd28fa0eed5268532bb78f545bbd8e23bbe99d81e09 +opentelemetry-instrumentation-system-metrics==0.61b0 \ + --hash=sha256:3eb55f9a058797cf915946cbb7445e00b31316ac3e55050475792edf3367c321 \ + --hash=sha256:7d4fe3e0ce14e0e6eb18f5826100d6cc1af662e5a8ebc74e9b91fe23f192f3e8 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -opentelemetry-instrumentation-wsgi==0.60b1 \ - --hash=sha256:5e7b432778ebf5a39af136227884a6ab2efc3c4e73e2dbb1d05ecf03ea196705 \ - --hash=sha256:eb553eec7ebfcf2945cc10d787a265e7abadb9ed1d1ebce8b13988d44fa0cf45 +opentelemetry-instrumentation-wsgi==0.61b0 \ + --hash=sha256:380f2ae61714e5303275a80b2e14c58571573cd1fddf496d8c39fb9551c5e532 \ + --hash=sha256:bd33b0824166f24134a3400648805e8d2e6a7951f070241294e8b8866611d7fa # via # -c src/backend/requirements.txt # -r src/backend/requirements.in # opentelemetry-instrumentation-django -opentelemetry-proto==1.39.1 \ - --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ - --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 +opentelemetry-proto==1.40.0 \ + --hash=sha256:03f639ca129ba513f5819810f5b1f42bcb371391405d99c168fe6937c62febcd \ + --hash=sha256:266c4385d88923a23d63e353e9761af0f47a6ed0d486979777fe4de59dc9b25f # via # -c src/backend/requirements.txt # opentelemetry-exporter-otlp-proto-common # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-sdk==1.39.1 \ - --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ - --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 +opentelemetry-sdk==1.40.0 \ + --hash=sha256:18e9f5ec20d859d268c7cb3c5198c8d105d073714db3de50b593b8c1345a48f2 \ + --hash=sha256:787d2154a71f4b3d81f20524a8ce061b7db667d24e46753f32a7bc48f1c1f3f1 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-semantic-conventions==0.60b1 \ - --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ - --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb +opentelemetry-semantic-conventions==0.61b0 \ + --hash=sha256:072f65473c5d7c6dc0355b27d6c9d1a679d63b6d4b4b16a9773062cb7e31192a \ + --hash=sha256:fa530a96be229795f8cef353739b618148b0fe2b4b3f005e60e262926c4d38e2 # via # -c src/backend/requirements.txt # opentelemetry-instrumentation @@ -1418,9 +1465,9 @@ opentelemetry-semantic-conventions==0.60b1 \ # opentelemetry-instrumentation-requests # opentelemetry-instrumentation-wsgi # opentelemetry-sdk -opentelemetry-util-http==0.60b1 \ - --hash=sha256:0d97152ca8c8a41ced7172d29d3622a219317f74ae6bb3027cfbdcf22c3cc0d6 \ - --hash=sha256:66381ba28550c91bee14dcba8979ace443444af1ed609226634596b4b0faf199 +opentelemetry-util-http==0.61b0 \ + --hash=sha256:1039cb891334ad2731affdf034d8fb8b48c239af9b6dd295e5fabd07f1c95572 \ + --hash=sha256:8e715e848233e9527ea47e275659ea60a57a75edf5206a3b937e236a6da5fc33 # via # -c src/backend/requirements.txt # opentelemetry-instrumentation-django @@ -1431,6 +1478,7 @@ packaging==26.0 \ --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 # via # -c src/backend/requirements.txt + # bleach # gunicorn # opentelemetry-instrumentation paramiko==4.0.0 \ @@ -1545,9 +1593,9 @@ pillow==12.1.1 \ # python-barcode # qrcode # weasyprint -pint==0.25.2 \ - --hash=sha256:85a45d1da8fe9c9f7477fed8aef59ad2b939af3d6611507e1a9cbdacdcd3450a \ - --hash=sha256:ca35ab1d8eeeb6f7d9942b3cb5f34ca42b61cdd5fb3eae79531553dcca04dda7 +pint==0.25.3 \ + --hash=sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d \ + --hash=sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -1557,9 +1605,9 @@ pip-licenses==5.5.1 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -platformdirs==4.9.2 \ - --hash=sha256:9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd \ - --hash=sha256:9a33809944b9db043ad67ca0db94b14bf452cc6aeaac46a88ea55b26e2e9d291 +platformdirs==4.9.4 \ + --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ + --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 # via # -c src/backend/requirements.txt # pint @@ -1575,17 +1623,17 @@ prettytable==3.17.0 \ # via # -c src/backend/requirements.txt # pip-licenses -protobuf==6.33.5 \ - --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ - --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ - --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ - --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ - --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ - --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ - --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ - --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ - --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ - --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b +protobuf==6.33.6 \ + --hash=sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326 \ + --hash=sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901 \ + --hash=sha256:7d29d9b65f8afef196f8334e80d6bc1d5d4adedb449971fefd3723824e6e77d3 \ + --hash=sha256:9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a \ + --hash=sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135 \ + --hash=sha256:bd56799fb262994b2c2faa1799693c95cc2e22c62f56fb43af311cae45d26f0e \ + --hash=sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3 \ + --hash=sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2 \ + --hash=sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593 \ + --hash=sha256:f443a394af5ed23672bc6c486be138628fbe5c651ccbc536873d7da23d1868cf # via # -c src/backend/requirements.txt # googleapis-common-protos @@ -1633,9 +1681,9 @@ pydyf==0.12.1 \ # via # -c src/backend/requirements.txt # weasyprint -pyjwt[crypto]==2.11.0 \ - --hash=sha256:35f95c1f0fbe5d5ba6e43f00271c275f7a1a4db1dab27bf708073b75318ea623 \ - --hash=sha256:94a6bde30eb5c8e04fee991062b534071fd1439ef58d2adc9ccb823e7bcd0469 +pyjwt[crypto]==2.12.1 \ + --hash=sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c \ + --hash=sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b # via # -c src/backend/requirements.txt # django-allauth @@ -1669,9 +1717,9 @@ pynacl==1.6.2 \ # via # -c src/backend/requirements.txt # paramiko -pypdf==6.7.5 \ - --hash=sha256:07ba7f1d6e6d9aa2a17f5452e320a84718d4ce863367f7ede2fd72280349ab13 \ - --hash=sha256:40bb2e2e872078655f12b9b89e2f900888bb505e88a82150b64f9f34fa25651d +pypdf==6.9.2 \ + --hash=sha256:662cf29bcb419a36a1365232449624ab40b7c2d0cfc28e54f42eeecd1fd7e844 \ + --hash=sha256:7f850faf2b0d4ab936582c05da32c52214c2b089d61a316627b5bfb5b0dab46c # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -1695,9 +1743,9 @@ python-dateutil==2.9.0.post0 \ # botocore # django-recurrence # icalendar -python-dotenv==1.2.1 \ - --hash=sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6 \ - --hash=sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61 +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -1899,9 +1947,9 @@ rapidfuzz==3.14.3 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -redis==7.2.1 \ - --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ - --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 +redis==7.4.0 \ + --hash=sha256:64a6ea7bf567ad43c964d2c30d82853f8df927c5c9017766c55a1d1ed95d18ad \ + --hash=sha256:a9c74a5c893a5ef8455a5adb793a31bb70feb821c86eccb62eebef5a19c429ec # via # -c src/backend/requirements.txt # django-redis @@ -1912,9 +1960,9 @@ referencing==0.37.0 \ # -c src/backend/requirements.txt # jsonschema # jsonschema-specifications -requests==2.32.5 \ - --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ - --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 # via # -c src/backend/requirements.txt # django-allauth @@ -2047,16 +2095,16 @@ s3transfer==0.16.0 \ # via # -c src/backend/requirements.txt # boto3 -sentry-sdk==2.53.0 \ - --hash=sha256:46e1ed8d84355ae54406c924f6b290c3d61f4048625989a723fd622aab838899 \ - --hash=sha256:6520ef2c4acd823f28efc55e43eb6ce2e6d9f954a95a3aa96b6fd14871e92b77 +sentry-sdk==2.56.0 \ + --hash=sha256:5afafb744ceb91d22f4cc650c6bd048ac6af5f7412dcc6c59305a2e36f4dbc02 \ + --hash=sha256:fdab72030b69625665b2eeb9738bdde748ad254e8073085a0ce95382678e8168 # via # -c src/backend/requirements.txt # -r src/backend/requirements.in # django-q-sentry -setuptools==82.0.0 \ - --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ - --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 +setuptools==82.0.1 \ + --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \ + --hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb # via # -c src/backend/requirements.txt # -r src/backend/requirements.in @@ -2070,6 +2118,7 @@ six==1.17.0 \ --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 # via # -c src/backend/requirements.txt + # bleach # python-dateutil sqlparse==0.5.5 \ --hash=sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba \ @@ -2090,17 +2139,16 @@ tablib[xls, xlsx, yaml]==3.9.0 \ # via # -c src/backend/requirements.txt # -r src/backend/requirements.in -tinycss2==1.4.0 \ - --hash=sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7 \ - --hash=sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289 +tinycss2==1.5.1 \ + --hash=sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661 \ + --hash=sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957 # via # -c src/backend/requirements.txt - # bleach # cssselect2 # weasyprint -tinyhtml5==2.0.0 \ - --hash=sha256:086f998833da24c300c414d9fe81d9b368fd04cb9d2596a008421cbc705fcfcc \ - --hash=sha256:13683277c5b176d070f82d099d977194b7a1e26815b016114f581a74bbfbf47e +tinyhtml5==2.1.0 \ + --hash=sha256:60a50ec3d938a37e491efa01af895853060943dcebb5627de5b10d188b338a67 \ + --hash=sha256:6e11cfff38515834268daf89d5f85bbde0b6dd02e8d9e212d1385c2289b89f0a # via # -c src/backend/requirements.txt # weasyprint @@ -2149,9 +2197,9 @@ wcwidth==0.6.0 \ # -c src/backend/requirements.txt # blessed # prettytable -weasyprint==66.0 \ - --hash=sha256:82b0783b726fcd318e2c977dcdddca76515b30044bc7a830cc4fbe717582a6d0 \ - --hash=sha256:da71dc87dc129ac9cffdc65e5477e90365ab9dbae45c744014ec1d06303dde40 +weasyprint==68.1 \ + --hash=sha256:4dc3ba63c68bbbce3e9617cb2226251c372f5ee90a8a484503b1c099da9cf5be \ + --hash=sha256:d3b752049b453a5c95edb27ce78d69e9319af5a34f257fa0f4c738c701b4184e # via # -c src/backend/requirements.txt # -r src/backend/requirements.in diff --git a/src/backend/requirements-dev-3.14.txt b/src/backend/requirements-dev-3.14.txt index 09f0138f8f..18a771cae5 100644 --- a/src/backend/requirements-dev-3.14.txt +++ b/src/backend/requirements-dev-3.14.txt @@ -7,9 +7,9 @@ asgiref==3.11.1 \ # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt # django -build==1.4.0 \ - --hash=sha256:6a07c1b8eb6f2b311b96fcbdbce5dab5fe637ffda0fd83c9cac622e927501596 \ - --hash=sha256:f1b91b925aa322be454f8330c6fb48b465da993d1e7e7e6fa35027ec49f3c936 +build==1.4.2 \ + --hash=sha256:35b14e1ee329c186d3f08466003521ed7685ec15ecffc07e68d706090bf161d1 \ + --hash=sha256:7a4d8651ea877cb2a89458b1b198f2e69f536c95e89129dbf5d448045d60db88 # via pip-tools certifi==2026.2.25 \ --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ @@ -112,120 +112,136 @@ cfgv==3.5.0 \ --hash=sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 \ --hash=sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132 # via pre-commit -charset-normalizer==3.4.4 \ - --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ - --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ - --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ - --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ - --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \ - --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ - --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \ - --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \ - --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ - --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ - --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ - --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \ - --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ - --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \ - --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ - --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \ - --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ - --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ - --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ - --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ - --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \ - --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ - --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \ - --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ - --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \ - --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ - --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ - --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ - --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \ - --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ - --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ - --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ - --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \ - --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ - --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ - --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ - --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ - --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ - --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \ - --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ - --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ - --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ - --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ - --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ - --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ - --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \ - --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ - --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ - --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ - --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ - --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \ - --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \ - --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ - --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ - --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \ - --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ - --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ - --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ - --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ - --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ - --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ - --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ - --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ - --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ - --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ - --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ - --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ - --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ - --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ - --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ - --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \ - --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \ - --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ - --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ - --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ - --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ - --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \ - --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \ - --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ - --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ - --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \ - --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ - --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ - --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \ - --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ - --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ - --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \ - --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \ - --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \ - --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ - --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ - --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ - --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ - --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ - --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ - --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ - --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ - --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ - --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \ - --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \ - --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ - --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ - --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ - --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \ - --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ - --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ - --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ - --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ - --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \ - --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ - --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \ - --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ - --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 +charset-normalizer==3.4.6 \ + --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ + --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ + --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ + --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ + --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ + --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ + --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ + --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ + --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ + --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ + --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ + --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ + --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ + --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ + --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ + --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ + --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ + --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ + --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ + --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ + --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ + --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ + --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ + --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ + --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ + --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ + --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ + --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ + --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ + --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ + --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ + --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ + --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ + --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ + --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ + --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ + --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ + --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ + --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ + --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ + --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ + --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ + --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ + --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ + --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ + --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ + --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ + --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ + --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ + --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ + --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ + --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ + --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ + --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ + --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ + --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ + --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ + --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ + --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ + --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ + --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ + --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ + --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ + --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ + --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ + --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ + --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ + --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ + --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ + --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ + --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ + --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ + --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ + --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ + --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ + --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ + --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ + --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ + --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ + --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ + --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ + --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ + --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ + --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ + --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ + --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ + --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ + --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ + --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ + --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ + --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ + --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ + --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ + --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ + --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ + --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ + --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ + --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ + --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ + --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ + --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ + --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ + --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ + --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ + --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ + --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ + --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ + --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ + --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ + --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ + --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ + --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ + --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ + --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ + --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ + --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ + --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ + --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ + --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ + --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ + --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ + --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ + --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ + --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ + --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ + --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ + --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ + --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ + --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -235,164 +251,164 @@ click==8.3.1 \ --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 # via pip-tools -coverage[toml]==7.13.4 \ - --hash=sha256:01d4cbc3c283a17fc1e42d614a119f7f438eabb593391283adca8dc86eff1246 \ - --hash=sha256:02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459 \ - --hash=sha256:0dd7ab8278f0d58a0128ba2fca25824321f05d059c1441800e934ff2efa52129 \ - --hash=sha256:0e086334e8537ddd17e5f16a344777c1ab8194986ec533711cbe6c41cde841b6 \ - --hash=sha256:0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415 \ - --hash=sha256:14375934243ee05f56c45393fe2ce81fe5cc503c07cee2bdf1725fb8bef3ffaf \ - --hash=sha256:1731dc33dc276dafc410a885cbf5992f1ff171393e48a21453b78727d090de80 \ - --hash=sha256:19bc3c88078789f8ef36acb014d7241961dbf883fd2533d18cb1e7a5b4e28b11 \ - --hash=sha256:1af1641e57cf7ba1bd67d677c9abdbcd6cc2ab7da3bca7fa1e2b7e50e65f2ad0 \ - --hash=sha256:1d4be36a5114c499f9f1f9195e95ebf979460dbe2d88e6816ea202010ba1c34b \ - --hash=sha256:200dea7d1e8095cc6e98cdabe3fd1d21ab17d3cee6dab00cadbb2fe35d9c15b9 \ - --hash=sha256:23e3f687cf945070d1c90f85db66d11e3025665d8dafa831301a0e0038f3db9b \ - --hash=sha256:2421d591f8ca05b308cf0092807308b2facbefe54af7c02ac22548b88b95c98f \ - --hash=sha256:245e37f664d89861cf2329c9afa2c1fe9e6d4e1a09d872c947e70718aeeac505 \ - --hash=sha256:25381386e80ae727608e662474db537d4df1ecd42379b5ba33c84633a2b36d47 \ - --hash=sha256:25a41c3104d08edb094d9db0d905ca54d0cd41c928bb6be3c4c799a54753af55 \ - --hash=sha256:296f8b0af861d3970c2a4d8c91d48eb4dd4771bcef9baedec6a9b515d7de3def \ - --hash=sha256:29e3220258d682b6226a9b0925bc563ed9a1ebcff3cad30f043eceea7eaf2689 \ - --hash=sha256:2a09cfa6a5862bc2fc6ca7c3def5b2926194a56b8ab78ffcf617d28911123012 \ - --hash=sha256:2b0f6ccf3dbe577170bebfce1318707d0e8c3650003cb4b3a9dd744575daa8b5 \ - --hash=sha256:2c048ea43875fbf8b45d476ad79f179809c590ec7b79e2035c662e7afa3192e3 \ - --hash=sha256:2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95 \ - --hash=sha256:2fa8d5f8de70688a28240de9e139fa16b153cc3cbb01c5f16d88d6505ebdadf9 \ - --hash=sha256:300deaee342f90696ed186e3a00c71b5b3d27bffe9e827677954f4ee56969601 \ - --hash=sha256:30b8d0512f2dc8c8747557e8fb459d6176a2c9e5731e2b74d311c03b78451997 \ - --hash=sha256:33901f604424145c6e9c2398684b92e176c0b12df77d52db81c20abd48c3794c \ - --hash=sha256:3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac \ - --hash=sha256:391ee8f19bef69210978363ca930f7328081c6a0152f1166c91f0b5fdd2a773c \ - --hash=sha256:3998e5a32e62fdf410c0dbd3115df86297995d6e3429af80b8798aad894ca7aa \ - --hash=sha256:3c06f0f1337c667b971ca2f975523347e63ec5e500b9aa5882d91931cd3ef750 \ - --hash=sha256:40aa8808140e55dc022b15d8aa7f651b6b3d68b365ea0398f1441e0b04d859c3 \ - --hash=sha256:40d74da8e6c4b9ac18b15331c4b5ebc35a17069410cad462ad4f40dcd2d50c0d \ - --hash=sha256:4223b4230a376138939a9173f1bdd6521994f2aff8047fae100d6d94d50c5a12 \ - --hash=sha256:48685fee12c2eb3b27c62f2658e7ea21e9c3239cba5a8a242801a0a3f6a8c62a \ - --hash=sha256:4c7d3cc01e7350f2f0f6f7036caaf5673fb56b6998889ccfe9e1c1fe75a9c932 \ - --hash=sha256:4e83efc079eb39480e6346a15a1bcb3e9b04759c5202d157e1dd4303cd619356 \ - --hash=sha256:4fc7fa81bbaf5a02801b65346c8b3e657f1d93763e58c0abdf7c992addd81a92 \ - --hash=sha256:53d133df809c743eb8bce33b24bcababb371f4441340578cd406e084d94a6148 \ - --hash=sha256:590c0ed4bf8e85f745e6b805b2e1c457b2e33d5255dd9729743165253bc9ad39 \ - --hash=sha256:5b856a8ccf749480024ff3bd7310adaef57bf31fd17e1bfc404b7940b6986634 \ - --hash=sha256:65dfcbe305c3dfe658492df2d85259e0d79ead4177f9ae724b6fb245198f55d6 \ - --hash=sha256:6f01afcff62bf9a08fb32b2c1d6e924236c0383c02c790732b6537269e466a72 \ - --hash=sha256:6fdef321fdfbb30a197efa02d48fcd9981f0d8ad2ae8903ac318adc653f5df98 \ - --hash=sha256:71ca20079dd8f27fcf808817e281e90220475cd75115162218d0e27549f95fef \ - --hash=sha256:725d985c5ab621268b2edb8e50dfe57633dc69bda071abc470fed55a14935fd3 \ - --hash=sha256:75eab1ebe4f2f64d9509b984f9314d4aa788540368218b858dad56dc8f3e5eb9 \ - --hash=sha256:75fcd519f2a5765db3f0e391eb3b7d150cce1a771bf4c9f861aeab86c767a3c0 \ - --hash=sha256:76451d1978b95ba6507a039090ba076105c87cc76fc3efd5d35d72093964d49a \ - --hash=sha256:784fc3cf8be001197b652d51d3fd259b1e2262888693a4636e18879f613a62a9 \ - --hash=sha256:78cdf0d578b15148b009ccf18c686aa4f719d887e76e6b40c38ffb61d264a552 \ - --hash=sha256:79be69cf7f3bf9b0deeeb062eab7ac7f36cd4cc4c4dd694bd28921ba4d8596cc \ - --hash=sha256:79e73a76b854d9c6088fe5d8b2ebe745f8681c55f7397c3c0a016192d681045f \ - --hash=sha256:7b322db1284a2ed3aa28ffd8ebe3db91c929b7a333c0820abec3d838ef5b3525 \ - --hash=sha256:7d41eead3cc673cbd38a4417deb7fd0b4ca26954ff7dc6078e33f6ff97bed940 \ - --hash=sha256:7eda778067ad7ffccd23ecffce537dface96212576a07924cbf0d8799d2ded5a \ - --hash=sha256:7f57b33491e281e962021de110b451ab8a24182589be17e12a22c79047935e23 \ - --hash=sha256:8041b6c5bfdc03257666e9881d33b1abc88daccaf73f7b6340fb7946655cd10f \ - --hash=sha256:8248977c2e33aecb2ced42fef99f2d319e9904a36e55a8a68b69207fb7e43edc \ - --hash=sha256:845f352911777a8e722bfce168958214951e07e47e5d5d9744109fa5fe77f79b \ - --hash=sha256:85480adfb35ffc32d40918aad81b89c69c9cc5661a9b8a81476d3e645321a056 \ - --hash=sha256:8e264226ec98e01a8e1054314af91ee6cde0eacac4f465cc93b03dbe0bce2fd7 \ - --hash=sha256:8e798c266c378da2bd819b0677df41ab46d78065fb2a399558f3f6cae78b2fbb \ - --hash=sha256:9181a3ccead280b828fae232df12b16652702b49d41e99d657f46cc7b1f6ec7a \ - --hash=sha256:9351229c8c8407645840edcc277f4a2d44814d1bc34a2128c11c2a031d45a5dd \ - --hash=sha256:93550784d9281e374fb5a12bf1324cc8a963fd63b2d2f223503ef0fd4aa339ea \ - --hash=sha256:9401ebc7ef522f01d01d45532c68c5ac40fb27113019b6b7d8b208f6e9baa126 \ - --hash=sha256:94eb63f9b363180aff17de3e7c8760c3ba94664ea2695c52f10111244d16a299 \ - --hash=sha256:9d107aff57a83222ddbd8d9ee705ede2af2cc926608b57abed8ef96b50b7e8f9 \ - --hash=sha256:a32ebc02a1805adf637fc8dec324b5cdacd2e493515424f70ee33799573d661b \ - --hash=sha256:a3aa4e7b9e416774b21797365b358a6e827ffadaaca81b69ee02946852449f00 \ - --hash=sha256:a6f94a7d00eb18f1b6d403c91a88fd58cfc92d4b16080dfdb774afc8294469bf \ - --hash=sha256:aa3feb8db2e87ff5e6d00d7e1480ae241876286691265657b500886c98f38bda \ - --hash=sha256:ad27098a189e5838900ce4c2a99f2fe42a0bf0c2093c17c69b45a71579e8d4a2 \ - --hash=sha256:ae4578f8528569d3cf303fef2ea569c7f4c4059a38c8667ccef15c6e1f118aa5 \ - --hash=sha256:b1ec7b6b6e93255f952e27ab58fbc68dcc468844b16ecbee881aeb29b6ab4d8d \ - --hash=sha256:b507778ae8a4c915436ed5c2e05b4a6cecfa70f734e19c22a005152a11c7b6a9 \ - --hash=sha256:b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9 \ - --hash=sha256:b720ce6a88a2755f7c697c23268ddc47a571b88052e6b155224347389fdf6a3b \ - --hash=sha256:b7b38448866e83176e28086674fe7368ab8590e4610fb662b44e345b86d63ffa \ - --hash=sha256:b8eb931ee8e6d8243e253e5ed7336deea6904369d2fd8ae6e43f68abbf167092 \ - --hash=sha256:bb28c0f2cf2782508a40cec377935829d5fcc3ad9a3681375af4e84eb34b6b58 \ - --hash=sha256:bd60d4fe2f6fa7dff9223ca1bbc9f05d2b6697bc5961072e5d3b952d46e1b1ea \ - --hash=sha256:c35eb28c1d085eb7d8c9b3296567a1bebe03ce72962e932431b9a61f28facf26 \ - --hash=sha256:c4240e7eded42d131a2d2c4dec70374b781b043ddc79a9de4d55ca71f8e98aea \ - --hash=sha256:caa421e2684e382c5d8973ac55e4f36bed6821a9bad5c953494de960c74595c9 \ - --hash=sha256:d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053 \ - --hash=sha256:d65b2d373032411e86960604dc4edac91fdfb5dca539461cf2cbe78327d1e64f \ - --hash=sha256:dae88bc0fc77edaa65c14be099bd57ee140cf507e6bfdeea7938457ab387efb0 \ - --hash=sha256:de6defc1c9badbf8b9e67ae90fd00519186d6ab64e5cc5f3d21359c2a9b2c1d3 \ - --hash=sha256:e101609bcbbfb04605ea1027b10dc3735c094d12d40826a60f897b98b1c30256 \ - --hash=sha256:e24f9156097ff9dc286f2f913df3a7f63c0e333dcafa3c196f2c18b4175ca09a \ - --hash=sha256:e2f25215f1a359ab17320b47bcdaca3e6e6356652e8256f2441e4ef972052903 \ - --hash=sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91 \ - --hash=sha256:e6f70dec1cc557e52df5306d051ef56003f74d56e9c4dd7ddb07e07ef32a84dd \ - --hash=sha256:e856bf6616714c3a9fbc270ab54103f4e685ba236fa98c054e8f87f266c93505 \ - --hash=sha256:e87f6c587c3f34356c3759f0420693e35e7eb0e2e41e4c011cb6ec6ecbbf1db7 \ - --hash=sha256:eb30bf180de3f632cd043322dad5751390e5385108b2807368997d1a92a509d0 \ - --hash=sha256:eb88b316ec33760714a4720feb2816a3a59180fd58c1985012054fa7aebee4c2 \ - --hash=sha256:eb9078108fbf0bcdde37c3f4779303673c2fa1fe8f7956e68d447d0dd426d38a \ - --hash=sha256:ecae9737b72408d6a950f7e525f30aca12d4bd8dd95e37342e5beb3a2a8c4f71 \ - --hash=sha256:ee756f00726693e5ba94d6df2bdfd64d4852d23b09bb0bc700e3b30e6f333985 \ - --hash=sha256:f4594c67d8a7c89cf922d9df0438c7c7bb022ad506eddb0fdb2863359ff78242 \ - --hash=sha256:f53d492307962561ac7de4cd1de3e363589b000ab69617c6156a16ba7237998d \ - --hash=sha256:fb07dc5da7e849e2ad31a5d74e9bece81f30ecf5a42909d0a695f8bd1874d6af \ - --hash=sha256:fb26a934946a6afe0e326aebe0730cdff393a8bc0bbb65a2f41e30feddca399c \ - --hash=sha256:fdfc1e28e7c7cdce44985b3043bc13bbd9c747520f94a4d7164af8260b3d91f0 +coverage[toml]==7.13.5 \ + --hash=sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256 \ + --hash=sha256:02ca0eed225b2ff301c474aeeeae27d26e2537942aa0f87491d3e147e784a82b \ + --hash=sha256:03ccc709a17a1de074fb1d11f217342fb0d2b1582ed544f554fc9fc3f07e95f5 \ + --hash=sha256:0428cbef5783ad91fe240f673cc1f76b25e74bbfe1a13115e4aa30d3f538162d \ + --hash=sha256:04690832cbea4e4663d9149e05dba142546ca05cb1848816760e7f58285c970a \ + --hash=sha256:0590e44dd2745c696a778f7bab6aa95256de2cbc8b8cff4f7db8ff09813d6969 \ + --hash=sha256:0672854dc733c342fa3e957e0605256d2bf5934feeac328da9e0b5449634a642 \ + --hash=sha256:084b84a8c63e8d6fc7e3931b316a9bcafca1458d753c539db82d31ed20091a87 \ + --hash=sha256:0b67af5492adb31940ee418a5a655c28e48165da5afab8c7fa6fd72a142f8740 \ + --hash=sha256:0cd9ed7a8b181775459296e402ca4fb27db1279740a24e93b3b41942ebe4b215 \ + --hash=sha256:0cef0cdec915d11254a7f549c1170afecce708d30610c6abdded1f74e581666d \ + --hash=sha256:0e223ce4b4ed47f065bfb123687686512e37629be25cc63728557ae7db261422 \ + --hash=sha256:0e3c426ffc4cd952f54ee9ffbdd10345709ecc78a3ecfd796a57236bfad0b9b8 \ + --hash=sha256:0ecf12ecb326fe2c339d93fc131816f3a7367d223db37817208905c89bded911 \ + --hash=sha256:10a0c37f0b646eaff7cce1874c31d1f1ccb297688d4c747291f4f4c70741cc8b \ + --hash=sha256:145ede53ccbafb297c1c9287f788d1bc3efd6c900da23bf6931b09eafc931587 \ + --hash=sha256:1b11eef33edeae9d142f9b4358edb76273b3bfd30bc3df9a4f95d0e49caf94e8 \ + --hash=sha256:1b88c69c8ef5d4b6fe7dea66d6636056a0f6a7527c440e890cf9259011f5e606 \ + --hash=sha256:258354455f4e86e3e9d0d17571d522e13b4e1e19bf0f8596bcf9476d61e7d8a9 \ + --hash=sha256:259b69bb83ad9894c4b25be2528139eecba9a82646ebdda2d9db1ba28424a6bf \ + --hash=sha256:2aa055ae1857258f9e0045be26a6d62bdb47a72448b62d7b55f4820f361a2633 \ + --hash=sha256:2d3807015f138ffea1ed9afeeb8624fd781703f2858b62a8dd8da5a0994c57b6 \ + --hash=sha256:301e3b7dfefecaca37c9f1aa6f0049b7d4ab8dd933742b607765d757aca77d43 \ + --hash=sha256:32ca0c0114c9834a43f045a87dcebd69d108d8ffb666957ea65aa132f50332e2 \ + --hash=sha256:34b02417cf070e173989b3db962f7ed56d2f644307b2cf9d5a0f258e13084a61 \ + --hash=sha256:356e76b46783a98c2a2fe81ec79df4883a1e62895ea952968fb253c114e7f930 \ + --hash=sha256:35a31f2b1578185fbe6aa2e74cea1b1d0bbf4c552774247d9160d29b80ed56cc \ + --hash=sha256:380e8e9084d8eb38db3a9176a1a4f3c0082c3806fa0dc882d1d87abc3c789247 \ + --hash=sha256:3ad050321264c49c2fa67bb599100456fc51d004b82534f379d16445da40fb75 \ + --hash=sha256:3e1bb5f6c78feeb1be3475789b14a0f0a5b47d505bfc7267126ccbd50289999e \ + --hash=sha256:3f4818d065964db3c1c66dc0fbdac5ac692ecbc875555e13374fdbe7eedb4376 \ + --hash=sha256:460cf0114c5016fa841214ff5564aa4864f11948da9440bc97e21ad1f4ba1e01 \ + --hash=sha256:48c39bc4a04d983a54a705a6389512883d4a3b9862991b3617d547940e9f52b1 \ + --hash=sha256:4b59148601efcd2bac8c4dbf1f0ad6391693ccf7a74b8205781751637076aee3 \ + --hash=sha256:4d2afbc5cc54d286bfb54541aa50b64cdb07a718227168c87b9e2fb8f25e1743 \ + --hash=sha256:505d7083c8b0c87a8fa8c07370c285847c1f77739b22e299ad75a6af6c32c5c9 \ + --hash=sha256:52f444e86475992506b32d4e5ca55c24fc88d73bcbda0e9745095b28ef4dc0cf \ + --hash=sha256:5b13955d31d1633cf9376908089b7cebe7d15ddad7aeaabcbe969a595a97e95e \ + --hash=sha256:5ec4af212df513e399cf11610cc27063f1586419e814755ab362e50a85ea69c1 \ + --hash=sha256:60365289c3741e4db327e7baff2a4aaacf22f788e80fa4683393891b70a89fbd \ + --hash=sha256:631efb83f01569670a5e866ceb80fe483e7c159fac6f167e6571522636104a0b \ + --hash=sha256:6697e29b93707167687543480a40f0db8f356e86d9f67ddf2e37e2dfd91a9dab \ + --hash=sha256:66a80c616f80181f4d643b0f9e709d97bcea413ecd9631e1dedc7401c8e6695d \ + --hash=sha256:67e9bc5449801fad0e5dff329499fb090ba4c5800b86805c80617b4e29809b2a \ + --hash=sha256:68a4953be99b17ac3c23b6efbc8a38330d99680c9458927491d18700ef23ded0 \ + --hash=sha256:6c36ddb64ed9d7e496028d1d00dfec3e428e0aabf4006583bb1839958d280510 \ + --hash=sha256:6e3370441f4513c6252bf042b9c36d22491142385049243253c7e48398a15a9f \ + --hash=sha256:7034b5c56a58ae5e85f23949d52c14aca2cfc6848a31764995b7de88f13a1ea0 \ + --hash=sha256:704de6328e3d612a8f6c07000a878ff38181ec3263d5a11da1db294fa6a9bdf8 \ + --hash=sha256:7132bed4bd7b836200c591410ae7d97bf7ae8be6fc87d160b2bd881df929e7bf \ + --hash=sha256:7300c8a6d13335b29bb76d7651c66af6bd8658517c43499f110ddc6717bfc209 \ + --hash=sha256:750db93a81e3e5a9831b534be7b1229df848b2e125a604fe6651e48aa070e5f9 \ + --hash=sha256:777c4d1eff1b67876139d24288aaf1817f6c03d6bae9c5cc8d27b83bcfe38fe3 \ + --hash=sha256:78e696e1cc714e57e8b25760b33a8b1026b7048d270140d25dafe1b0a1ee05a3 \ + --hash=sha256:79060214983769c7ba3f0cee10b54c97609dca4d478fa1aa32b914480fd5738d \ + --hash=sha256:7c8d4bc913dd70b93488d6c496c77f3aff5ea99a07e36a18f865bca55adef8bd \ + --hash=sha256:7f2c47b36fe7709a6e83bfadf4eefb90bd25fbe4014d715224c4316f808e59a2 \ + --hash=sha256:800bc829053c80d240a687ceeb927a94fd108bbdc68dfbe505d0d75ab578a882 \ + --hash=sha256:843ea8643cf967d1ac7e8ecd4bb00c99135adf4816c0c0593fdcc47b597fcf09 \ + --hash=sha256:8769751c10f339021e2638cd354e13adeac54004d1941119b2c96fe5276d45ea \ + --hash=sha256:8dd02af98971bdb956363e4827d34425cb3df19ee550ef92855b0acb9c7ce51c \ + --hash=sha256:8fdf453a942c3e4d99bd80088141c4c6960bb232c409d9c3558e2dbaa3998562 \ + --hash=sha256:941617e518602e2d64942c88ec8499f7fbd49d3f6c4327d3a71d43a1973032f3 \ + --hash=sha256:972a9cd27894afe4bc2b1480107054e062df08e671df7c2f18c205e805ccd806 \ + --hash=sha256:9adb6688e3b53adffefd4a52d72cbd8b02602bfb8f74dcd862337182fd4d1a4e \ + --hash=sha256:9b74db26dfea4f4e50d48a4602207cd1e78be33182bc9cbf22da94f332f99878 \ + --hash=sha256:9bb2a28101a443669a423b665939381084412b81c3f8c0fcfbac57f4e30b5b8e \ + --hash=sha256:9d44d7aa963820b1b971dbecd90bfe5fe8f81cff79787eb6cca15750bd2f79b9 \ + --hash=sha256:9dacc2ad679b292709e0f5fc1ac74a6d4d5562e424058962c7bb0c658ad25e45 \ + --hash=sha256:9ddb4f4a5479f2539644be484da179b653273bca1a323947d48ab107b3ed1f29 \ + --hash=sha256:a1a6d79a14e1ec1832cabc833898636ad5f3754a678ef8bb4908515208bf84f4 \ + --hash=sha256:a698e363641b98843c517817db75373c83254781426e94ada3197cabbc2c919c \ + --hash=sha256:ad14385487393e386e2ea988b09d62dd42c397662ac2dabc3832d71253eee479 \ + --hash=sha256:ad146744ca4fd09b50c482650e3c1b1f4dfa1d4792e0a04a369c7f23336f0400 \ + --hash=sha256:b5db73ba3c41c7008037fa731ad5459fc3944cb7452fc0aa9f822ad3533c583c \ + --hash=sha256:bd3a2fbc1c6cccb3c5106140d87cc6a8715110373ef42b63cf5aea29df8c217a \ + --hash=sha256:bdba0a6b8812e8c7df002d908a9a2ea3c36e92611b5708633c50869e6d922fdf \ + --hash=sha256:be3d4bbad9d4b037791794ddeedd7d64a56f5933a2c1373e18e9e568b9141686 \ + --hash=sha256:bf69236a9a81bdca3bff53796237aab096cdbf8d78a66ad61e992d9dac7eb2de \ + --hash=sha256:bff95879c33ec8da99fc9b6fe345ddb5be6414b41d6d1ad1c8f188d26f36e028 \ + --hash=sha256:c555b48be1853fe3997c11c4bd521cdd9a9612352de01fa4508f16ec341e6fe0 \ + --hash=sha256:c81f6515c4c40141f83f502b07bbfa5c240ba25bbe73da7b33f1e5b6120ff179 \ + --hash=sha256:c9136ff29c3a91e25b1d1552b5308e53a1e0653a23e53b6366d7c2dcbbaf8a16 \ + --hash=sha256:ce1998c0483007608c8382f4ff50164bfc5bd07a2246dd272aa4043b75e61e85 \ + --hash=sha256:cec2d83125531bd153175354055cdb7a09987af08a9430bd173c937c6d0fba2a \ + --hash=sha256:cff784eef7f0b8f6cb28804fbddcfa99f89efe4cc35fb5627e3ac58f91ed3ac0 \ + --hash=sha256:d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810 \ + --hash=sha256:d7cfad2d6d81dd298ab6b89fe72c3b7b05ec7544bdda3b707ddaecff8d25c161 \ + --hash=sha256:d8a7a2049c14f413163e2bdabd37e41179b1d1ccb10ffc6ccc4b7a718429c607 \ + --hash=sha256:da305e9937617ee95c2e39d8ff9f040e0487cbf1ac174f777ed5eddd7a7c1f26 \ + --hash=sha256:da86cdcf10d2519e10cabb8ac2de03da1bcb6e4853790b7fbd48523332e3a819 \ + --hash=sha256:dc022073d063b25a402454e5712ef9e007113e3a676b96c5f29b2bda29352f40 \ + --hash=sha256:e0723d2c96324561b9aa76fb982406e11d93cdb388a7a7da2b16e04719cf7ca5 \ + --hash=sha256:e092b9499de38ae0fbfbc603a74660eb6ff3e869e507b50d85a13b6db9863e15 \ + --hash=sha256:e0b216a19534b2427cc201a26c25da4a48633f29a487c61258643e89d28200c0 \ + --hash=sha256:e1c85e0b6c05c592ea6d8768a66a254bfb3874b53774b12d4c89c481eb78cb90 \ + --hash=sha256:e301d30dd7e95ae068671d746ba8c34e945a82682e62918e41b2679acd2051a0 \ + --hash=sha256:e808af52a0513762df4d945ea164a24b37f2f518cbe97e03deaa0ee66139b4d6 \ + --hash=sha256:eb07647a5738b89baab047f14edd18ded523de60f3b30e75c2acc826f79c839a \ + --hash=sha256:eb7fdf1ef130660e7415e0253a01a7d5a88c9c4d158bcf75cbbd922fd65a5b58 \ + --hash=sha256:ec10e2a42b41c923c2209b846126c6582db5e43a33157e9870ba9fb70dc7854b \ + --hash=sha256:ee2aa19e03161671ec964004fb74b2257805d9710bf14a5c704558b9d8dbaf17 \ + --hash=sha256:f08fd75c50a760c7eb068ae823777268daaf16a80b918fa58eea888f8e3919f5 \ + --hash=sha256:f4cd16206ad171cbc2470dbea9103cf9a7607d5fe8c242fdf1edf36174020664 \ + --hash=sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0 \ + --hash=sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f # via -r src/backend/requirements-dev.in -cryptography==46.0.5 \ - --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ - --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ - --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ - --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ - --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ - --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ - --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ - --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ - --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ - --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ - --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ - --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ - --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ - --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ - --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ - --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ - --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ - --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ - --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ - --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ - --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ - --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ - --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ - --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ - --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ - --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ - --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ - --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ - --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ - --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ - --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ - --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ - --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ - --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ - --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ - --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ - --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ - --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ - --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ - --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ - --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ - --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ - --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ - --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ - --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ - --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ - --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ - --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ - --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 +cryptography==46.0.7 \ + --hash=sha256:04959522f938493042d595a736e7dbdff6eb6cc2339c11465b3ff89343b65f65 \ + --hash=sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832 \ + --hash=sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067 \ + --hash=sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de \ + --hash=sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4 \ + --hash=sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0 \ + --hash=sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b \ + --hash=sha256:3986ac1dee6def53797289999eabe84798ad7817f3e97779b5061a95b0ee4968 \ + --hash=sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef \ + --hash=sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b \ + --hash=sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4 \ + --hash=sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3 \ + --hash=sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308 \ + --hash=sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e \ + --hash=sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163 \ + --hash=sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f \ + --hash=sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee \ + --hash=sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77 \ + --hash=sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85 \ + --hash=sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99 \ + --hash=sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7 \ + --hash=sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83 \ + --hash=sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85 \ + --hash=sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006 \ + --hash=sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb \ + --hash=sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e \ + --hash=sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba \ + --hash=sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325 \ + --hash=sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d \ + --hash=sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1 \ + --hash=sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1 \ + --hash=sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2 \ + --hash=sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0 \ + --hash=sha256:d02c738dacda7dc2a74d1b2b3177042009d5cab7c7079db74afc19e56ca1b455 \ + --hash=sha256:d151173275e1728cf7839aaa80c34fe550c04ddb27b34f48c232193df8db5842 \ + --hash=sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457 \ + --hash=sha256:d3b99c535a9de0adced13d159c5a9cf65c325601aa30f4be08afd680643e9c15 \ + --hash=sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2 \ + --hash=sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c \ + --hash=sha256:e06acf3c99be55aa3b516397fe42f5855597f430add9c17fa46bf2e0fb34c9bb \ + --hash=sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5 \ + --hash=sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4 \ + --hash=sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902 \ + --hash=sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246 \ + --hash=sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022 \ + --hash=sha256:fc9ab8856ae6cf7c9358430e49b368f3108f050031442eaeb6b9d87e4dcf4e4f \ + --hash=sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e \ + --hash=sha256:fdd1736fed309b4300346f88f74cd120c27c56852c3838cab416e7a166f67298 \ + --hash=sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -401,9 +417,9 @@ distlib==0.4.0 \ --hash=sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 \ --hash=sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d # via virtualenv -django==5.2.12 \ - --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ - --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb +django==5.2.13 \ + --hash=sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a \ + --hash=sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4 # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -414,20 +430,20 @@ django==5.2.12 \ django-querycount==0.8.3 \ --hash=sha256:0782484e8a1bd29498fa0195a67106e47cdcc98fafe80cebb1991964077cb694 # via -r src/backend/requirements-dev.in -django-silk==5.4.3 \ - --hash=sha256:bedb17c8fd9c029a7746cb947864f5c9ea943ae33d6a9581e60f67c45e4490ad \ - --hash=sha256:f7920ae91a34716654296140b2cbf449e9798237a0c6eb7cf2cd79c2cfb39321 +django-silk==5.5.0 \ + --hash=sha256:41fcabe65d59d31ccdb69daeb3c3e6d30879ab2c00b0875b111fda0f69aec065 \ + --hash=sha256:82b5a690d623935be916dd145e2f605a4ac9454d54e03df6a7ffcf38333c8444 # via -r src/backend/requirements-dev.in django-slowtests==1.1.1 \ --hash=sha256:3c6936d420c9df444ac03625b41d97de043c662bbde61fbcd33e4cd407d0c247 # via -r src/backend/requirements-dev.in -django-stubs==5.2.9 \ - --hash=sha256:2317a7130afdaa76f6ff7f623650d7f3bf1b6c86a60f95840e14e6ec6de1a7cd \ - --hash=sha256:c192257120b08785cfe6f2f1c91f1797aceae8e9daa689c336e52c91e8f6a493 +django-stubs==6.0.1 \ + --hash=sha256:d885044bd0876610f3eb969d6b5ed22f386002a879fdcb369cd8efa0502dbbce \ + --hash=sha256:e1ca63634221b57a55e16562b9b6d1849aeee2cabfd0fc026084dbe8aa893366 # via -r src/backend/requirements-dev.in -django-stubs-ext==5.2.9 \ - --hash=sha256:230c51575551b0165be40177f0f6805f1e3ebf799b835c85f5d64c371ca6cf71 \ - --hash=sha256:6db4054d1580657b979b7d391474719f1a978773e66c7070a5e246cd445a25a9 +django-stubs-ext==6.0.1 \ + --hash=sha256:17415759b9a3f4b4da7998ac3b08c7dc5137f9a019490b918aece1a8a4c2ade4 \ + --hash=sha256:633b280f89c0cbb7e3ce2f2f842e0acc43d8091378e75f84921d6be675d052dc # via django-stubs django-test-migrations==1.5.0 \ --hash=sha256:1cbff04b1e82c5564a6f635284907b381cc11a2ff883adff46776d9126824f07 \ @@ -437,9 +453,9 @@ django-types==0.23.0 \ --hash=sha256:0727b13ae810c4b1f14eeac9872834ac928c99dc76584ea7c23afc4461e049dd \ --hash=sha256:f97fb746166fb15a5f40e470a1fd7a58226349aac9e0a9cb8ae81deb14d94fd0 # via -r src/backend/requirements-dev.in -filelock==3.24.3 \ - --hash=sha256:011a5644dc937c22699943ebbfc46e969cdde3e171470a6e40b9533e5a72affa \ - --hash=sha256:426e9a4660391f7f8a810d71b0555bce9008b0a1cc342ab1f6947d37639e002d +filelock==3.25.2 \ + --hash=sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694 \ + --hash=sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 # via # python-discovery # virtualenv @@ -447,9 +463,9 @@ gprof2dot==2025.4.14 \ --hash=sha256:0742e4c0b4409a5e8777e739388a11e1ed3750be86895655312ea7c20bd0090e \ --hash=sha256:35743e2d2ca027bf48fa7cba37021aaf4a27beeae1ae8e05a50b55f1f921a6ce # via django-silk -identify==2.6.16 \ - --hash=sha256:391ee4d77741d994189522896270b787aed8670389bfd60f326d677d64a6dfb0 \ - --hash=sha256:846857203b5511bbe94d5a352a48ef2359532bc8f6727b5544077a0dcfb24980 +identify==2.6.18 \ + --hash=sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd \ + --hash=sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737 # via pre-commit idna==3.11 \ --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ @@ -462,9 +478,9 @@ iniconfig==2.3.0 \ --hash=sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730 \ --hash=sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 # via pytest -isort==8.0.0 \ - --hash=sha256:184916a933041c7cf718787f7e52064f3c06272aff69a5cb4dc46497bd8911d9 \ - --hash=sha256:fddea59202f231e170e52e71e3510b99c373b6e571b55d9c7b31b679c0fed47c +isort==8.0.1 \ + --hash=sha256:171ac4ff559cdc060bcfff550bc8404a486fee0caab245679c2abe7cb253c78d \ + --hash=sha256:28b89bc70f751b559aeca209e6120393d43fbe2490de0559662be7a9787e3d75 # via -r src/backend/requirements-dev.in markdown-it-py==4.0.0 \ --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ @@ -499,9 +515,9 @@ pip-tools==7.5.3 \ --hash=sha256:3aac0c473240ae90db7213c033401f345b05197293ccbdd2704e52e7a783785e \ --hash=sha256:8fa364779ebc010cbfe17cb9de404457ac733e100840423f28f6955de7742d41 # via -r src/backend/requirements-dev.in -platformdirs==4.9.2 \ - --hash=sha256:9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd \ - --hash=sha256:9a33809944b9db043ad67ca0db94b14bf452cc6aeaac46a88ea55b26e2e9d291 +platformdirs==4.9.4 \ + --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ + --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -522,9 +538,9 @@ pycparser==3.0 \ # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt # cffi -pygments==2.19.2 \ - --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \ - --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 # via # pytest # rich @@ -562,9 +578,9 @@ pytest-django==4.12.0 \ --hash=sha256:3ff300c49f8350ba2953b90297d23bf5f589db69545f56f1ec5f8cff5da83e85 \ --hash=sha256:df94ec819a83c8979c8f6de13d9cdfbe76e8c21d39473cfe2b40c9fc9be3c758 # via -r src/backend/requirements-dev.in -python-discovery==1.1.0 \ - --hash=sha256:447941ba1aed8cc2ab7ee3cb91be5fc137c5bdbb05b7e6ea62fbdcb66e50b268 \ - --hash=sha256:a162893b8809727f54594a99ad2179d2ede4bf953e12d4c7abc3cc9cdbd1437b +python-discovery==1.2.1 \ + --hash=sha256:180c4d114bff1c32462537eac5d6a332b768242b76b69c0259c7d14b1b680c9e \ + --hash=sha256:b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502 # via virtualenv pyyaml==6.0.3 \ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ @@ -644,9 +660,9 @@ pyyaml==6.0.3 \ # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt # pre-commit -requests==2.32.5 \ - --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ - --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -659,9 +675,9 @@ rich==14.3.3 \ --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b # via pytest-codspeed -setuptools==82.0.0 \ - --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ - --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 +setuptools==82.0.1 \ + --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \ + --hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb # via # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt @@ -719,9 +735,9 @@ urllib3==2.6.3 \ # -c src/backend/requirements-3.14.txt # -c src/backend/requirements.txt # requests -virtualenv==21.1.0 \ - --hash=sha256:164f5e14c5587d170cf98e60378eb91ea35bf037be313811905d3a24ea33cc07 \ - --hash=sha256:1990a0188c8f16b6b9cf65c9183049007375b26aad415514d377ccacf1e4fb44 +virtualenv==21.2.0 \ + --hash=sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098 \ + --hash=sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f # via pre-commit wheel==0.46.3 \ --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ diff --git a/src/backend/requirements-dev.txt b/src/backend/requirements-dev.txt index d8fa6ba8cf..e85bcec88e 100644 --- a/src/backend/requirements-dev.txt +++ b/src/backend/requirements-dev.txt @@ -6,9 +6,9 @@ asgiref==3.11.1 \ # via # -c src/backend/requirements.txt # django -build==1.4.0 \ - --hash=sha256:6a07c1b8eb6f2b311b96fcbdbce5dab5fe637ffda0fd83c9cac622e927501596 \ - --hash=sha256:f1b91b925aa322be454f8330c6fb48b465da993d1e7e7e6fa35027ec49f3c936 +build==1.4.2 \ + --hash=sha256:35b14e1ee329c186d3f08466003521ed7685ec15ecffc07e68d706090bf161d1 \ + --hash=sha256:7a4d8651ea877cb2a89458b1b198f2e69f536c95e89129dbf5d448045d60db88 # via pip-tools certifi==2026.2.25 \ --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ @@ -109,120 +109,136 @@ cfgv==3.5.0 \ --hash=sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 \ --hash=sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132 # via pre-commit -charset-normalizer==3.4.4 \ - --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ - --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ - --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ - --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ - --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \ - --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ - --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \ - --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \ - --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ - --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ - --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ - --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \ - --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ - --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \ - --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ - --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \ - --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ - --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ - --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ - --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ - --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \ - --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ - --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \ - --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ - --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \ - --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ - --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ - --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ - --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \ - --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ - --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ - --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ - --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \ - --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ - --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ - --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ - --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ - --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ - --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \ - --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ - --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ - --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ - --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ - --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ - --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ - --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \ - --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ - --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ - --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ - --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ - --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \ - --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \ - --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ - --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ - --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \ - --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ - --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ - --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ - --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ - --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ - --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ - --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ - --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ - --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ - --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ - --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ - --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ - --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ - --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ - --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ - --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \ - --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \ - --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ - --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ - --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ - --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ - --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \ - --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \ - --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ - --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ - --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \ - --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ - --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ - --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \ - --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ - --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ - --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \ - --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \ - --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \ - --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ - --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ - --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ - --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ - --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ - --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ - --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ - --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ - --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ - --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \ - --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \ - --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ - --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ - --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ - --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \ - --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ - --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ - --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ - --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ - --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \ - --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ - --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \ - --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ - --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 +charset-normalizer==3.4.6 \ + --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ + --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ + --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ + --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ + --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ + --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ + --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ + --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ + --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ + --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ + --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ + --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ + --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ + --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ + --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ + --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ + --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ + --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ + --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ + --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ + --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ + --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ + --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ + --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ + --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ + --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ + --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ + --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ + --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ + --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ + --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ + --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ + --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ + --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ + --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ + --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ + --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ + --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ + --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ + --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ + --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ + --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ + --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ + --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ + --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ + --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ + --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ + --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ + --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ + --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ + --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ + --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ + --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ + --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ + --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ + --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ + --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ + --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ + --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ + --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ + --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ + --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ + --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ + --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ + --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ + --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ + --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ + --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ + --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ + --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ + --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ + --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ + --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ + --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ + --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ + --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ + --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ + --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ + --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ + --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ + --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ + --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ + --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ + --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ + --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ + --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ + --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ + --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ + --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ + --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ + --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ + --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ + --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ + --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ + --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ + --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ + --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ + --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ + --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ + --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ + --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ + --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ + --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ + --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ + --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ + --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ + --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ + --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ + --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ + --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ + --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ + --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ + --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ + --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ + --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ + --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ + --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ + --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ + --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ + --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ + --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ + --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ + --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ + --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ + --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ + --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ + --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ + --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ + --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 # via # -c src/backend/requirements.txt # pdfminer-six @@ -231,164 +247,164 @@ click==8.3.1 \ --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 # via pip-tools -coverage[toml]==7.13.4 \ - --hash=sha256:01d4cbc3c283a17fc1e42d614a119f7f438eabb593391283adca8dc86eff1246 \ - --hash=sha256:02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459 \ - --hash=sha256:0dd7ab8278f0d58a0128ba2fca25824321f05d059c1441800e934ff2efa52129 \ - --hash=sha256:0e086334e8537ddd17e5f16a344777c1ab8194986ec533711cbe6c41cde841b6 \ - --hash=sha256:0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415 \ - --hash=sha256:14375934243ee05f56c45393fe2ce81fe5cc503c07cee2bdf1725fb8bef3ffaf \ - --hash=sha256:1731dc33dc276dafc410a885cbf5992f1ff171393e48a21453b78727d090de80 \ - --hash=sha256:19bc3c88078789f8ef36acb014d7241961dbf883fd2533d18cb1e7a5b4e28b11 \ - --hash=sha256:1af1641e57cf7ba1bd67d677c9abdbcd6cc2ab7da3bca7fa1e2b7e50e65f2ad0 \ - --hash=sha256:1d4be36a5114c499f9f1f9195e95ebf979460dbe2d88e6816ea202010ba1c34b \ - --hash=sha256:200dea7d1e8095cc6e98cdabe3fd1d21ab17d3cee6dab00cadbb2fe35d9c15b9 \ - --hash=sha256:23e3f687cf945070d1c90f85db66d11e3025665d8dafa831301a0e0038f3db9b \ - --hash=sha256:2421d591f8ca05b308cf0092807308b2facbefe54af7c02ac22548b88b95c98f \ - --hash=sha256:245e37f664d89861cf2329c9afa2c1fe9e6d4e1a09d872c947e70718aeeac505 \ - --hash=sha256:25381386e80ae727608e662474db537d4df1ecd42379b5ba33c84633a2b36d47 \ - --hash=sha256:25a41c3104d08edb094d9db0d905ca54d0cd41c928bb6be3c4c799a54753af55 \ - --hash=sha256:296f8b0af861d3970c2a4d8c91d48eb4dd4771bcef9baedec6a9b515d7de3def \ - --hash=sha256:29e3220258d682b6226a9b0925bc563ed9a1ebcff3cad30f043eceea7eaf2689 \ - --hash=sha256:2a09cfa6a5862bc2fc6ca7c3def5b2926194a56b8ab78ffcf617d28911123012 \ - --hash=sha256:2b0f6ccf3dbe577170bebfce1318707d0e8c3650003cb4b3a9dd744575daa8b5 \ - --hash=sha256:2c048ea43875fbf8b45d476ad79f179809c590ec7b79e2035c662e7afa3192e3 \ - --hash=sha256:2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95 \ - --hash=sha256:2fa8d5f8de70688a28240de9e139fa16b153cc3cbb01c5f16d88d6505ebdadf9 \ - --hash=sha256:300deaee342f90696ed186e3a00c71b5b3d27bffe9e827677954f4ee56969601 \ - --hash=sha256:30b8d0512f2dc8c8747557e8fb459d6176a2c9e5731e2b74d311c03b78451997 \ - --hash=sha256:33901f604424145c6e9c2398684b92e176c0b12df77d52db81c20abd48c3794c \ - --hash=sha256:3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac \ - --hash=sha256:391ee8f19bef69210978363ca930f7328081c6a0152f1166c91f0b5fdd2a773c \ - --hash=sha256:3998e5a32e62fdf410c0dbd3115df86297995d6e3429af80b8798aad894ca7aa \ - --hash=sha256:3c06f0f1337c667b971ca2f975523347e63ec5e500b9aa5882d91931cd3ef750 \ - --hash=sha256:40aa8808140e55dc022b15d8aa7f651b6b3d68b365ea0398f1441e0b04d859c3 \ - --hash=sha256:40d74da8e6c4b9ac18b15331c4b5ebc35a17069410cad462ad4f40dcd2d50c0d \ - --hash=sha256:4223b4230a376138939a9173f1bdd6521994f2aff8047fae100d6d94d50c5a12 \ - --hash=sha256:48685fee12c2eb3b27c62f2658e7ea21e9c3239cba5a8a242801a0a3f6a8c62a \ - --hash=sha256:4c7d3cc01e7350f2f0f6f7036caaf5673fb56b6998889ccfe9e1c1fe75a9c932 \ - --hash=sha256:4e83efc079eb39480e6346a15a1bcb3e9b04759c5202d157e1dd4303cd619356 \ - --hash=sha256:4fc7fa81bbaf5a02801b65346c8b3e657f1d93763e58c0abdf7c992addd81a92 \ - --hash=sha256:53d133df809c743eb8bce33b24bcababb371f4441340578cd406e084d94a6148 \ - --hash=sha256:590c0ed4bf8e85f745e6b805b2e1c457b2e33d5255dd9729743165253bc9ad39 \ - --hash=sha256:5b856a8ccf749480024ff3bd7310adaef57bf31fd17e1bfc404b7940b6986634 \ - --hash=sha256:65dfcbe305c3dfe658492df2d85259e0d79ead4177f9ae724b6fb245198f55d6 \ - --hash=sha256:6f01afcff62bf9a08fb32b2c1d6e924236c0383c02c790732b6537269e466a72 \ - --hash=sha256:6fdef321fdfbb30a197efa02d48fcd9981f0d8ad2ae8903ac318adc653f5df98 \ - --hash=sha256:71ca20079dd8f27fcf808817e281e90220475cd75115162218d0e27549f95fef \ - --hash=sha256:725d985c5ab621268b2edb8e50dfe57633dc69bda071abc470fed55a14935fd3 \ - --hash=sha256:75eab1ebe4f2f64d9509b984f9314d4aa788540368218b858dad56dc8f3e5eb9 \ - --hash=sha256:75fcd519f2a5765db3f0e391eb3b7d150cce1a771bf4c9f861aeab86c767a3c0 \ - --hash=sha256:76451d1978b95ba6507a039090ba076105c87cc76fc3efd5d35d72093964d49a \ - --hash=sha256:784fc3cf8be001197b652d51d3fd259b1e2262888693a4636e18879f613a62a9 \ - --hash=sha256:78cdf0d578b15148b009ccf18c686aa4f719d887e76e6b40c38ffb61d264a552 \ - --hash=sha256:79be69cf7f3bf9b0deeeb062eab7ac7f36cd4cc4c4dd694bd28921ba4d8596cc \ - --hash=sha256:79e73a76b854d9c6088fe5d8b2ebe745f8681c55f7397c3c0a016192d681045f \ - --hash=sha256:7b322db1284a2ed3aa28ffd8ebe3db91c929b7a333c0820abec3d838ef5b3525 \ - --hash=sha256:7d41eead3cc673cbd38a4417deb7fd0b4ca26954ff7dc6078e33f6ff97bed940 \ - --hash=sha256:7eda778067ad7ffccd23ecffce537dface96212576a07924cbf0d8799d2ded5a \ - --hash=sha256:7f57b33491e281e962021de110b451ab8a24182589be17e12a22c79047935e23 \ - --hash=sha256:8041b6c5bfdc03257666e9881d33b1abc88daccaf73f7b6340fb7946655cd10f \ - --hash=sha256:8248977c2e33aecb2ced42fef99f2d319e9904a36e55a8a68b69207fb7e43edc \ - --hash=sha256:845f352911777a8e722bfce168958214951e07e47e5d5d9744109fa5fe77f79b \ - --hash=sha256:85480adfb35ffc32d40918aad81b89c69c9cc5661a9b8a81476d3e645321a056 \ - --hash=sha256:8e264226ec98e01a8e1054314af91ee6cde0eacac4f465cc93b03dbe0bce2fd7 \ - --hash=sha256:8e798c266c378da2bd819b0677df41ab46d78065fb2a399558f3f6cae78b2fbb \ - --hash=sha256:9181a3ccead280b828fae232df12b16652702b49d41e99d657f46cc7b1f6ec7a \ - --hash=sha256:9351229c8c8407645840edcc277f4a2d44814d1bc34a2128c11c2a031d45a5dd \ - --hash=sha256:93550784d9281e374fb5a12bf1324cc8a963fd63b2d2f223503ef0fd4aa339ea \ - --hash=sha256:9401ebc7ef522f01d01d45532c68c5ac40fb27113019b6b7d8b208f6e9baa126 \ - --hash=sha256:94eb63f9b363180aff17de3e7c8760c3ba94664ea2695c52f10111244d16a299 \ - --hash=sha256:9d107aff57a83222ddbd8d9ee705ede2af2cc926608b57abed8ef96b50b7e8f9 \ - --hash=sha256:a32ebc02a1805adf637fc8dec324b5cdacd2e493515424f70ee33799573d661b \ - --hash=sha256:a3aa4e7b9e416774b21797365b358a6e827ffadaaca81b69ee02946852449f00 \ - --hash=sha256:a6f94a7d00eb18f1b6d403c91a88fd58cfc92d4b16080dfdb774afc8294469bf \ - --hash=sha256:aa3feb8db2e87ff5e6d00d7e1480ae241876286691265657b500886c98f38bda \ - --hash=sha256:ad27098a189e5838900ce4c2a99f2fe42a0bf0c2093c17c69b45a71579e8d4a2 \ - --hash=sha256:ae4578f8528569d3cf303fef2ea569c7f4c4059a38c8667ccef15c6e1f118aa5 \ - --hash=sha256:b1ec7b6b6e93255f952e27ab58fbc68dcc468844b16ecbee881aeb29b6ab4d8d \ - --hash=sha256:b507778ae8a4c915436ed5c2e05b4a6cecfa70f734e19c22a005152a11c7b6a9 \ - --hash=sha256:b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9 \ - --hash=sha256:b720ce6a88a2755f7c697c23268ddc47a571b88052e6b155224347389fdf6a3b \ - --hash=sha256:b7b38448866e83176e28086674fe7368ab8590e4610fb662b44e345b86d63ffa \ - --hash=sha256:b8eb931ee8e6d8243e253e5ed7336deea6904369d2fd8ae6e43f68abbf167092 \ - --hash=sha256:bb28c0f2cf2782508a40cec377935829d5fcc3ad9a3681375af4e84eb34b6b58 \ - --hash=sha256:bd60d4fe2f6fa7dff9223ca1bbc9f05d2b6697bc5961072e5d3b952d46e1b1ea \ - --hash=sha256:c35eb28c1d085eb7d8c9b3296567a1bebe03ce72962e932431b9a61f28facf26 \ - --hash=sha256:c4240e7eded42d131a2d2c4dec70374b781b043ddc79a9de4d55ca71f8e98aea \ - --hash=sha256:caa421e2684e382c5d8973ac55e4f36bed6821a9bad5c953494de960c74595c9 \ - --hash=sha256:d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053 \ - --hash=sha256:d65b2d373032411e86960604dc4edac91fdfb5dca539461cf2cbe78327d1e64f \ - --hash=sha256:dae88bc0fc77edaa65c14be099bd57ee140cf507e6bfdeea7938457ab387efb0 \ - --hash=sha256:de6defc1c9badbf8b9e67ae90fd00519186d6ab64e5cc5f3d21359c2a9b2c1d3 \ - --hash=sha256:e101609bcbbfb04605ea1027b10dc3735c094d12d40826a60f897b98b1c30256 \ - --hash=sha256:e24f9156097ff9dc286f2f913df3a7f63c0e333dcafa3c196f2c18b4175ca09a \ - --hash=sha256:e2f25215f1a359ab17320b47bcdaca3e6e6356652e8256f2441e4ef972052903 \ - --hash=sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91 \ - --hash=sha256:e6f70dec1cc557e52df5306d051ef56003f74d56e9c4dd7ddb07e07ef32a84dd \ - --hash=sha256:e856bf6616714c3a9fbc270ab54103f4e685ba236fa98c054e8f87f266c93505 \ - --hash=sha256:e87f6c587c3f34356c3759f0420693e35e7eb0e2e41e4c011cb6ec6ecbbf1db7 \ - --hash=sha256:eb30bf180de3f632cd043322dad5751390e5385108b2807368997d1a92a509d0 \ - --hash=sha256:eb88b316ec33760714a4720feb2816a3a59180fd58c1985012054fa7aebee4c2 \ - --hash=sha256:eb9078108fbf0bcdde37c3f4779303673c2fa1fe8f7956e68d447d0dd426d38a \ - --hash=sha256:ecae9737b72408d6a950f7e525f30aca12d4bd8dd95e37342e5beb3a2a8c4f71 \ - --hash=sha256:ee756f00726693e5ba94d6df2bdfd64d4852d23b09bb0bc700e3b30e6f333985 \ - --hash=sha256:f4594c67d8a7c89cf922d9df0438c7c7bb022ad506eddb0fdb2863359ff78242 \ - --hash=sha256:f53d492307962561ac7de4cd1de3e363589b000ab69617c6156a16ba7237998d \ - --hash=sha256:fb07dc5da7e849e2ad31a5d74e9bece81f30ecf5a42909d0a695f8bd1874d6af \ - --hash=sha256:fb26a934946a6afe0e326aebe0730cdff393a8bc0bbb65a2f41e30feddca399c \ - --hash=sha256:fdfc1e28e7c7cdce44985b3043bc13bbd9c747520f94a4d7164af8260b3d91f0 +coverage[toml]==7.13.5 \ + --hash=sha256:012d5319e66e9d5a218834642d6c35d265515a62f01157a45bcc036ecf947256 \ + --hash=sha256:02ca0eed225b2ff301c474aeeeae27d26e2537942aa0f87491d3e147e784a82b \ + --hash=sha256:03ccc709a17a1de074fb1d11f217342fb0d2b1582ed544f554fc9fc3f07e95f5 \ + --hash=sha256:0428cbef5783ad91fe240f673cc1f76b25e74bbfe1a13115e4aa30d3f538162d \ + --hash=sha256:04690832cbea4e4663d9149e05dba142546ca05cb1848816760e7f58285c970a \ + --hash=sha256:0590e44dd2745c696a778f7bab6aa95256de2cbc8b8cff4f7db8ff09813d6969 \ + --hash=sha256:0672854dc733c342fa3e957e0605256d2bf5934feeac328da9e0b5449634a642 \ + --hash=sha256:084b84a8c63e8d6fc7e3931b316a9bcafca1458d753c539db82d31ed20091a87 \ + --hash=sha256:0b67af5492adb31940ee418a5a655c28e48165da5afab8c7fa6fd72a142f8740 \ + --hash=sha256:0cd9ed7a8b181775459296e402ca4fb27db1279740a24e93b3b41942ebe4b215 \ + --hash=sha256:0cef0cdec915d11254a7f549c1170afecce708d30610c6abdded1f74e581666d \ + --hash=sha256:0e223ce4b4ed47f065bfb123687686512e37629be25cc63728557ae7db261422 \ + --hash=sha256:0e3c426ffc4cd952f54ee9ffbdd10345709ecc78a3ecfd796a57236bfad0b9b8 \ + --hash=sha256:0ecf12ecb326fe2c339d93fc131816f3a7367d223db37817208905c89bded911 \ + --hash=sha256:10a0c37f0b646eaff7cce1874c31d1f1ccb297688d4c747291f4f4c70741cc8b \ + --hash=sha256:145ede53ccbafb297c1c9287f788d1bc3efd6c900da23bf6931b09eafc931587 \ + --hash=sha256:1b11eef33edeae9d142f9b4358edb76273b3bfd30bc3df9a4f95d0e49caf94e8 \ + --hash=sha256:1b88c69c8ef5d4b6fe7dea66d6636056a0f6a7527c440e890cf9259011f5e606 \ + --hash=sha256:258354455f4e86e3e9d0d17571d522e13b4e1e19bf0f8596bcf9476d61e7d8a9 \ + --hash=sha256:259b69bb83ad9894c4b25be2528139eecba9a82646ebdda2d9db1ba28424a6bf \ + --hash=sha256:2aa055ae1857258f9e0045be26a6d62bdb47a72448b62d7b55f4820f361a2633 \ + --hash=sha256:2d3807015f138ffea1ed9afeeb8624fd781703f2858b62a8dd8da5a0994c57b6 \ + --hash=sha256:301e3b7dfefecaca37c9f1aa6f0049b7d4ab8dd933742b607765d757aca77d43 \ + --hash=sha256:32ca0c0114c9834a43f045a87dcebd69d108d8ffb666957ea65aa132f50332e2 \ + --hash=sha256:34b02417cf070e173989b3db962f7ed56d2f644307b2cf9d5a0f258e13084a61 \ + --hash=sha256:356e76b46783a98c2a2fe81ec79df4883a1e62895ea952968fb253c114e7f930 \ + --hash=sha256:35a31f2b1578185fbe6aa2e74cea1b1d0bbf4c552774247d9160d29b80ed56cc \ + --hash=sha256:380e8e9084d8eb38db3a9176a1a4f3c0082c3806fa0dc882d1d87abc3c789247 \ + --hash=sha256:3ad050321264c49c2fa67bb599100456fc51d004b82534f379d16445da40fb75 \ + --hash=sha256:3e1bb5f6c78feeb1be3475789b14a0f0a5b47d505bfc7267126ccbd50289999e \ + --hash=sha256:3f4818d065964db3c1c66dc0fbdac5ac692ecbc875555e13374fdbe7eedb4376 \ + --hash=sha256:460cf0114c5016fa841214ff5564aa4864f11948da9440bc97e21ad1f4ba1e01 \ + --hash=sha256:48c39bc4a04d983a54a705a6389512883d4a3b9862991b3617d547940e9f52b1 \ + --hash=sha256:4b59148601efcd2bac8c4dbf1f0ad6391693ccf7a74b8205781751637076aee3 \ + --hash=sha256:4d2afbc5cc54d286bfb54541aa50b64cdb07a718227168c87b9e2fb8f25e1743 \ + --hash=sha256:505d7083c8b0c87a8fa8c07370c285847c1f77739b22e299ad75a6af6c32c5c9 \ + --hash=sha256:52f444e86475992506b32d4e5ca55c24fc88d73bcbda0e9745095b28ef4dc0cf \ + --hash=sha256:5b13955d31d1633cf9376908089b7cebe7d15ddad7aeaabcbe969a595a97e95e \ + --hash=sha256:5ec4af212df513e399cf11610cc27063f1586419e814755ab362e50a85ea69c1 \ + --hash=sha256:60365289c3741e4db327e7baff2a4aaacf22f788e80fa4683393891b70a89fbd \ + --hash=sha256:631efb83f01569670a5e866ceb80fe483e7c159fac6f167e6571522636104a0b \ + --hash=sha256:6697e29b93707167687543480a40f0db8f356e86d9f67ddf2e37e2dfd91a9dab \ + --hash=sha256:66a80c616f80181f4d643b0f9e709d97bcea413ecd9631e1dedc7401c8e6695d \ + --hash=sha256:67e9bc5449801fad0e5dff329499fb090ba4c5800b86805c80617b4e29809b2a \ + --hash=sha256:68a4953be99b17ac3c23b6efbc8a38330d99680c9458927491d18700ef23ded0 \ + --hash=sha256:6c36ddb64ed9d7e496028d1d00dfec3e428e0aabf4006583bb1839958d280510 \ + --hash=sha256:6e3370441f4513c6252bf042b9c36d22491142385049243253c7e48398a15a9f \ + --hash=sha256:7034b5c56a58ae5e85f23949d52c14aca2cfc6848a31764995b7de88f13a1ea0 \ + --hash=sha256:704de6328e3d612a8f6c07000a878ff38181ec3263d5a11da1db294fa6a9bdf8 \ + --hash=sha256:7132bed4bd7b836200c591410ae7d97bf7ae8be6fc87d160b2bd881df929e7bf \ + --hash=sha256:7300c8a6d13335b29bb76d7651c66af6bd8658517c43499f110ddc6717bfc209 \ + --hash=sha256:750db93a81e3e5a9831b534be7b1229df848b2e125a604fe6651e48aa070e5f9 \ + --hash=sha256:777c4d1eff1b67876139d24288aaf1817f6c03d6bae9c5cc8d27b83bcfe38fe3 \ + --hash=sha256:78e696e1cc714e57e8b25760b33a8b1026b7048d270140d25dafe1b0a1ee05a3 \ + --hash=sha256:79060214983769c7ba3f0cee10b54c97609dca4d478fa1aa32b914480fd5738d \ + --hash=sha256:7c8d4bc913dd70b93488d6c496c77f3aff5ea99a07e36a18f865bca55adef8bd \ + --hash=sha256:7f2c47b36fe7709a6e83bfadf4eefb90bd25fbe4014d715224c4316f808e59a2 \ + --hash=sha256:800bc829053c80d240a687ceeb927a94fd108bbdc68dfbe505d0d75ab578a882 \ + --hash=sha256:843ea8643cf967d1ac7e8ecd4bb00c99135adf4816c0c0593fdcc47b597fcf09 \ + --hash=sha256:8769751c10f339021e2638cd354e13adeac54004d1941119b2c96fe5276d45ea \ + --hash=sha256:8dd02af98971bdb956363e4827d34425cb3df19ee550ef92855b0acb9c7ce51c \ + --hash=sha256:8fdf453a942c3e4d99bd80088141c4c6960bb232c409d9c3558e2dbaa3998562 \ + --hash=sha256:941617e518602e2d64942c88ec8499f7fbd49d3f6c4327d3a71d43a1973032f3 \ + --hash=sha256:972a9cd27894afe4bc2b1480107054e062df08e671df7c2f18c205e805ccd806 \ + --hash=sha256:9adb6688e3b53adffefd4a52d72cbd8b02602bfb8f74dcd862337182fd4d1a4e \ + --hash=sha256:9b74db26dfea4f4e50d48a4602207cd1e78be33182bc9cbf22da94f332f99878 \ + --hash=sha256:9bb2a28101a443669a423b665939381084412b81c3f8c0fcfbac57f4e30b5b8e \ + --hash=sha256:9d44d7aa963820b1b971dbecd90bfe5fe8f81cff79787eb6cca15750bd2f79b9 \ + --hash=sha256:9dacc2ad679b292709e0f5fc1ac74a6d4d5562e424058962c7bb0c658ad25e45 \ + --hash=sha256:9ddb4f4a5479f2539644be484da179b653273bca1a323947d48ab107b3ed1f29 \ + --hash=sha256:a1a6d79a14e1ec1832cabc833898636ad5f3754a678ef8bb4908515208bf84f4 \ + --hash=sha256:a698e363641b98843c517817db75373c83254781426e94ada3197cabbc2c919c \ + --hash=sha256:ad14385487393e386e2ea988b09d62dd42c397662ac2dabc3832d71253eee479 \ + --hash=sha256:ad146744ca4fd09b50c482650e3c1b1f4dfa1d4792e0a04a369c7f23336f0400 \ + --hash=sha256:b5db73ba3c41c7008037fa731ad5459fc3944cb7452fc0aa9f822ad3533c583c \ + --hash=sha256:bd3a2fbc1c6cccb3c5106140d87cc6a8715110373ef42b63cf5aea29df8c217a \ + --hash=sha256:bdba0a6b8812e8c7df002d908a9a2ea3c36e92611b5708633c50869e6d922fdf \ + --hash=sha256:be3d4bbad9d4b037791794ddeedd7d64a56f5933a2c1373e18e9e568b9141686 \ + --hash=sha256:bf69236a9a81bdca3bff53796237aab096cdbf8d78a66ad61e992d9dac7eb2de \ + --hash=sha256:bff95879c33ec8da99fc9b6fe345ddb5be6414b41d6d1ad1c8f188d26f36e028 \ + --hash=sha256:c555b48be1853fe3997c11c4bd521cdd9a9612352de01fa4508f16ec341e6fe0 \ + --hash=sha256:c81f6515c4c40141f83f502b07bbfa5c240ba25bbe73da7b33f1e5b6120ff179 \ + --hash=sha256:c9136ff29c3a91e25b1d1552b5308e53a1e0653a23e53b6366d7c2dcbbaf8a16 \ + --hash=sha256:ce1998c0483007608c8382f4ff50164bfc5bd07a2246dd272aa4043b75e61e85 \ + --hash=sha256:cec2d83125531bd153175354055cdb7a09987af08a9430bd173c937c6d0fba2a \ + --hash=sha256:cff784eef7f0b8f6cb28804fbddcfa99f89efe4cc35fb5627e3ac58f91ed3ac0 \ + --hash=sha256:d2c87e0c473a10bffe991502eac389220533024c8082ec1ce849f4218dded810 \ + --hash=sha256:d7cfad2d6d81dd298ab6b89fe72c3b7b05ec7544bdda3b707ddaecff8d25c161 \ + --hash=sha256:d8a7a2049c14f413163e2bdabd37e41179b1d1ccb10ffc6ccc4b7a718429c607 \ + --hash=sha256:da305e9937617ee95c2e39d8ff9f040e0487cbf1ac174f777ed5eddd7a7c1f26 \ + --hash=sha256:da86cdcf10d2519e10cabb8ac2de03da1bcb6e4853790b7fbd48523332e3a819 \ + --hash=sha256:dc022073d063b25a402454e5712ef9e007113e3a676b96c5f29b2bda29352f40 \ + --hash=sha256:e0723d2c96324561b9aa76fb982406e11d93cdb388a7a7da2b16e04719cf7ca5 \ + --hash=sha256:e092b9499de38ae0fbfbc603a74660eb6ff3e869e507b50d85a13b6db9863e15 \ + --hash=sha256:e0b216a19534b2427cc201a26c25da4a48633f29a487c61258643e89d28200c0 \ + --hash=sha256:e1c85e0b6c05c592ea6d8768a66a254bfb3874b53774b12d4c89c481eb78cb90 \ + --hash=sha256:e301d30dd7e95ae068671d746ba8c34e945a82682e62918e41b2679acd2051a0 \ + --hash=sha256:e808af52a0513762df4d945ea164a24b37f2f518cbe97e03deaa0ee66139b4d6 \ + --hash=sha256:eb07647a5738b89baab047f14edd18ded523de60f3b30e75c2acc826f79c839a \ + --hash=sha256:eb7fdf1ef130660e7415e0253a01a7d5a88c9c4d158bcf75cbbd922fd65a5b58 \ + --hash=sha256:ec10e2a42b41c923c2209b846126c6582db5e43a33157e9870ba9fb70dc7854b \ + --hash=sha256:ee2aa19e03161671ec964004fb74b2257805d9710bf14a5c704558b9d8dbaf17 \ + --hash=sha256:f08fd75c50a760c7eb068ae823777268daaf16a80b918fa58eea888f8e3919f5 \ + --hash=sha256:f4cd16206ad171cbc2470dbea9103cf9a7607d5fe8c242fdf1edf36174020664 \ + --hash=sha256:f70c9ab2595c56f81a89620e22899eea8b212a4041bd728ac6f4a28bf5d3ddd0 \ + --hash=sha256:fbabfaceaeb587e16f7008f7795cd80d20ec548dc7f94fbb0d4ec2e038ce563f # via -r src/backend/requirements-dev.in -cryptography==46.0.5 \ - --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ - --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ - --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ - --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ - --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ - --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ - --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ - --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ - --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ - --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ - --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ - --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ - --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ - --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ - --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ - --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ - --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ - --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ - --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ - --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ - --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ - --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ - --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ - --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ - --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ - --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ - --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ - --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ - --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ - --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ - --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ - --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ - --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ - --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ - --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ - --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ - --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ - --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ - --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ - --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ - --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ - --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ - --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ - --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ - --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ - --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ - --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ - --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ - --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 +cryptography==46.0.7 \ + --hash=sha256:04959522f938493042d595a736e7dbdff6eb6cc2339c11465b3ff89343b65f65 \ + --hash=sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832 \ + --hash=sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067 \ + --hash=sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de \ + --hash=sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4 \ + --hash=sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0 \ + --hash=sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b \ + --hash=sha256:3986ac1dee6def53797289999eabe84798ad7817f3e97779b5061a95b0ee4968 \ + --hash=sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef \ + --hash=sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b \ + --hash=sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4 \ + --hash=sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3 \ + --hash=sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308 \ + --hash=sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e \ + --hash=sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163 \ + --hash=sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f \ + --hash=sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee \ + --hash=sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77 \ + --hash=sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85 \ + --hash=sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99 \ + --hash=sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7 \ + --hash=sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83 \ + --hash=sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85 \ + --hash=sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006 \ + --hash=sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb \ + --hash=sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e \ + --hash=sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba \ + --hash=sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325 \ + --hash=sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d \ + --hash=sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1 \ + --hash=sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1 \ + --hash=sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2 \ + --hash=sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0 \ + --hash=sha256:d02c738dacda7dc2a74d1b2b3177042009d5cab7c7079db74afc19e56ca1b455 \ + --hash=sha256:d151173275e1728cf7839aaa80c34fe550c04ddb27b34f48c232193df8db5842 \ + --hash=sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457 \ + --hash=sha256:d3b99c535a9de0adced13d159c5a9cf65c325601aa30f4be08afd680643e9c15 \ + --hash=sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2 \ + --hash=sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c \ + --hash=sha256:e06acf3c99be55aa3b516397fe42f5855597f430add9c17fa46bf2e0fb34c9bb \ + --hash=sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5 \ + --hash=sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4 \ + --hash=sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902 \ + --hash=sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246 \ + --hash=sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022 \ + --hash=sha256:fc9ab8856ae6cf7c9358430e49b368f3108f050031442eaeb6b9d87e4dcf4e4f \ + --hash=sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e \ + --hash=sha256:fdd1736fed309b4300346f88f74cd120c27c56852c3838cab416e7a166f67298 \ + --hash=sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce # via # -c src/backend/requirements.txt # pdfminer-six @@ -396,9 +412,9 @@ distlib==0.4.0 \ --hash=sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 \ --hash=sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d # via virtualenv -django==5.2.12 \ - --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ - --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb +django==5.2.13 \ + --hash=sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a \ + --hash=sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4 # via # -c src/backend/requirements.txt # django-silk @@ -408,20 +424,20 @@ django==5.2.12 \ django-querycount==0.8.3 \ --hash=sha256:0782484e8a1bd29498fa0195a67106e47cdcc98fafe80cebb1991964077cb694 # via -r src/backend/requirements-dev.in -django-silk==5.4.3 \ - --hash=sha256:bedb17c8fd9c029a7746cb947864f5c9ea943ae33d6a9581e60f67c45e4490ad \ - --hash=sha256:f7920ae91a34716654296140b2cbf449e9798237a0c6eb7cf2cd79c2cfb39321 +django-silk==5.5.0 \ + --hash=sha256:41fcabe65d59d31ccdb69daeb3c3e6d30879ab2c00b0875b111fda0f69aec065 \ + --hash=sha256:82b5a690d623935be916dd145e2f605a4ac9454d54e03df6a7ffcf38333c8444 # via -r src/backend/requirements-dev.in django-slowtests==1.1.1 \ --hash=sha256:3c6936d420c9df444ac03625b41d97de043c662bbde61fbcd33e4cd407d0c247 # via -r src/backend/requirements-dev.in -django-stubs==5.2.9 \ - --hash=sha256:2317a7130afdaa76f6ff7f623650d7f3bf1b6c86a60f95840e14e6ec6de1a7cd \ - --hash=sha256:c192257120b08785cfe6f2f1c91f1797aceae8e9daa689c336e52c91e8f6a493 +django-stubs==6.0.1 \ + --hash=sha256:d885044bd0876610f3eb969d6b5ed22f386002a879fdcb369cd8efa0502dbbce \ + --hash=sha256:e1ca63634221b57a55e16562b9b6d1849aeee2cabfd0fc026084dbe8aa893366 # via -r src/backend/requirements-dev.in -django-stubs-ext==5.2.9 \ - --hash=sha256:230c51575551b0165be40177f0f6805f1e3ebf799b835c85f5d64c371ca6cf71 \ - --hash=sha256:6db4054d1580657b979b7d391474719f1a978773e66c7070a5e246cd445a25a9 +django-stubs-ext==6.0.1 \ + --hash=sha256:17415759b9a3f4b4da7998ac3b08c7dc5137f9a019490b918aece1a8a4c2ade4 \ + --hash=sha256:633b280f89c0cbb7e3ce2f2f842e0acc43d8091378e75f84921d6be675d052dc # via django-stubs django-test-migrations==1.5.0 \ --hash=sha256:1cbff04b1e82c5564a6f635284907b381cc11a2ff883adff46776d9126824f07 \ @@ -431,17 +447,19 @@ django-types==0.23.0 \ --hash=sha256:0727b13ae810c4b1f14eeac9872834ac928c99dc76584ea7c23afc4461e049dd \ --hash=sha256:f97fb746166fb15a5f40e470a1fd7a58226349aac9e0a9cb8ae81deb14d94fd0 # via -r src/backend/requirements-dev.in -filelock==3.24.3 \ - --hash=sha256:011a5644dc937c22699943ebbfc46e969cdde3e171470a6e40b9533e5a72affa \ - --hash=sha256:426e9a4660391f7f8a810d71b0555bce9008b0a1cc342ab1f6947d37639e002d - # via virtualenv +filelock==3.25.2 \ + --hash=sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694 \ + --hash=sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 + # via + # python-discovery + # virtualenv gprof2dot==2025.4.14 \ --hash=sha256:0742e4c0b4409a5e8777e739388a11e1ed3750be86895655312ea7c20bd0090e \ --hash=sha256:35743e2d2ca027bf48fa7cba37021aaf4a27beeae1ae8e05a50b55f1f921a6ce # via django-silk -identify==2.6.16 \ - --hash=sha256:391ee4d77741d994189522896270b787aed8670389bfd60f326d677d64a6dfb0 \ - --hash=sha256:846857203b5511bbe94d5a352a48ef2359532bc8f6727b5544077a0dcfb24980 +identify==2.6.18 \ + --hash=sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd \ + --hash=sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737 # via pre-commit idna==3.11 \ --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ @@ -453,9 +471,9 @@ iniconfig==2.3.0 \ --hash=sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730 \ --hash=sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 # via pytest -isort==8.0.0 \ - --hash=sha256:184916a933041c7cf718787f7e52064f3c06272aff69a5cb4dc46497bd8911d9 \ - --hash=sha256:fddea59202f231e170e52e71e3510b99c373b6e571b55d9c7b31b679c0fed47c +isort==8.0.1 \ + --hash=sha256:171ac4ff559cdc060bcfff550bc8404a486fee0caab245679c2abe7cb253c78d \ + --hash=sha256:28b89bc70f751b559aeca209e6120393d43fbe2490de0559662be7a9787e3d75 # via -r src/backend/requirements-dev.in markdown-it-py==4.0.0 \ --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ @@ -489,11 +507,12 @@ pip-tools==7.5.3 \ --hash=sha256:3aac0c473240ae90db7213c033401f345b05197293ccbdd2704e52e7a783785e \ --hash=sha256:8fa364779ebc010cbfe17cb9de404457ac733e100840423f28f6955de7742d41 # via -r src/backend/requirements-dev.in -platformdirs==4.9.2 \ - --hash=sha256:9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd \ - --hash=sha256:9a33809944b9db043ad67ca0db94b14bf452cc6aeaac46a88ea55b26e2e9d291 +platformdirs==4.9.4 \ + --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ + --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 # via # -c src/backend/requirements.txt + # python-discovery # virtualenv pluggy==1.6.0 \ --hash=sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3 \ @@ -509,9 +528,9 @@ pycparser==3.0 \ # via # -c src/backend/requirements.txt # cffi -pygments==2.19.2 \ - --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \ - --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b +pygments==2.20.0 \ + --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ + --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 # via # pytest # rich @@ -549,6 +568,10 @@ pytest-django==4.12.0 \ --hash=sha256:3ff300c49f8350ba2953b90297d23bf5f589db69545f56f1ec5f8cff5da83e85 \ --hash=sha256:df94ec819a83c8979c8f6de13d9cdfbe76e8c21d39473cfe2b40c9fc9be3c758 # via -r src/backend/requirements-dev.in +python-discovery==1.2.1 \ + --hash=sha256:180c4d114bff1c32462537eac5d6a332b768242b76b69c0259c7d14b1b680c9e \ + --hash=sha256:b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502 + # via virtualenv pyyaml==6.0.3 \ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ --hash=sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a \ @@ -626,9 +649,9 @@ pyyaml==6.0.3 \ # via # -c src/backend/requirements.txt # pre-commit -requests==2.32.5 \ - --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ - --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 # via # -c src/backend/requirements.txt # requests-mock @@ -640,9 +663,9 @@ rich==14.3.3 \ --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b # via pytest-codspeed -setuptools==82.0.0 \ - --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ - --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 +setuptools==82.0.1 \ + --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \ + --hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb # via # -c src/backend/requirements.txt # -r src/backend/requirements-dev.in @@ -654,54 +677,54 @@ sqlparse==0.5.5 \ # -c src/backend/requirements.txt # django # django-silk -tomli==2.4.0 \ - --hash=sha256:0408e3de5ec77cc7f81960c362543cbbd91ef883e3138e81b729fc3eea5b9729 \ - --hash=sha256:0dc56fef0e2c1c470aeac5b6ca8cc7b640bb93e92d9803ddaf9ea03e198f5b0b \ - --hash=sha256:0e0fe8a0b8312acf3a88077a0802565cb09ee34107813bba1c7cd591fa6cfc8d \ - --hash=sha256:0f2e3955efea4d1cfbcb87bc321e00dc08d2bcb737fd1d5e398af111d86db5df \ - --hash=sha256:133e93646ec4300d651839d382d63edff11d8978be23da4cc106f5a18b7d0576 \ - --hash=sha256:1b168f2731796b045128c45982d3a4874057626da0e2ef1fdd722848b741361d \ - --hash=sha256:1c8a885b370751837c029ef9bc014f27d80840e48bac415f3412e6593bbc18c1 \ - --hash=sha256:1f776e7d669ebceb01dee46484485f43a4048746235e683bcdffacdf1fb4785a \ - --hash=sha256:1fb2945cbe303b1419e2706e711b7113da57b7db31ee378d08712d678a34e51e \ - --hash=sha256:20cedb4ee43278bc4f2fee6cb50daec836959aadaf948db5172e776dd3d993fc \ - --hash=sha256:20ffd184fb1df76a66e34bd1b36b4a4641bd2b82954befa32fe8163e79f1a702 \ - --hash=sha256:26ab906a1eb794cd4e103691daa23d95c6919cc2fa9160000ac02370cc9dd3f6 \ - --hash=sha256:2add28aacc7425117ff6364fe9e06a183bb0251b03f986df0e78e974047571fd \ - --hash=sha256:2b1e3b80e1d5e52e40e9b924ec43d81570f0e7d09d11081b797bc4692765a3d4 \ - --hash=sha256:31d556d079d72db7c584c0627ff3a24c5d3fb4f730221d3444f3efb1b2514776 \ - --hash=sha256:36b9d05b51e65b254ea6c2585b59d2c4cb91c8a3d91d0ed0f17591a29aaea54a \ - --hash=sha256:39b0b5d1b6dd03684b3fb276407ebed7090bbec989fa55838c98560c01113b66 \ - --hash=sha256:3cf226acb51d8f1c394c1b310e0e0e61fecdd7adcb78d01e294ac297dd2e7f87 \ - --hash=sha256:3d895d56bd3f82ddd6faaff993c275efc2ff38e52322ea264122d72729dca2b2 \ - --hash=sha256:413540dce94673591859c4c6f794dfeaa845e98bf35d72ed59636f869ef9f86f \ - --hash=sha256:43e685b9b2341681907759cf3a04e14d7104b3580f808cfde1dfdb60ada85475 \ - --hash=sha256:4cbcb367d44a1f0c2be408758b43e1ffb5308abe0ea222897d6bfc8e8281ef2f \ - --hash=sha256:551e321c6ba03b55676970b47cb1b73f14a0a4dce6a3e1a9458fd6d921d72e95 \ - --hash=sha256:5572e41282d5268eb09a697c89a7bee84fae66511f87533a6f88bd2f7b652da9 \ - --hash=sha256:5aa48d7c2356055feef06a43611fc401a07337d5b006be13a30f6c58f869e3c3 \ - --hash=sha256:5b5807f3999fb66776dbce568cc9a828544244a8eb84b84b9bafc080c99597b9 \ - --hash=sha256:5e3f639a7a8f10069d0e15408c0b96a2a828cfdec6fca05296ebcdcc28ca7c76 \ - --hash=sha256:685306e2cc7da35be4ee914fd34ab801a6acacb061b6a7abca922aaf9ad368da \ - --hash=sha256:75c2f8bbddf170e8effc98f5e9084a8751f8174ea6ccf4fca5398436e0320bc8 \ - --hash=sha256:7b438885858efd5be02a9a133caf5812b8776ee0c969fea02c45e8e3f296ba51 \ - --hash=sha256:7d49c66a7d5e56ac959cb6fc583aff0651094ec071ba9ad43df785abc2320d86 \ - --hash=sha256:7d6d9a4aee98fac3eab4952ad1d73aee87359452d1c086b5ceb43ed02ddb16b8 \ - --hash=sha256:84d081fbc252d1b6a982e1870660e7330fb8f90f676f6e78b052ad4e64714bf0 \ - --hash=sha256:8768715ffc41f0008abe25d808c20c3d990f42b6e2e58305d5da280ae7d1fa3b \ - --hash=sha256:920b1de295e72887bafa3ad9f7a792f811847d57ea6b1215154030cf131f16b1 \ - --hash=sha256:9a08144fa4cba33db5255f9b74f0b89888622109bd2776148f2597447f92a94e \ - --hash=sha256:a26d7ff68dfdb9f87a016ecfd1e1c2bacbe3108f4e0f8bcd2228ef9a766c787d \ - --hash=sha256:aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c \ - --hash=sha256:b5ef256a3fd497d4973c11bf142e9ed78b150d36f5773f1ca6088c230ffc5867 \ - --hash=sha256:b6c78bdf37764092d369722d9946cb65b8767bfa4110f902a1b2542d8d173c8a \ - --hash=sha256:bbb1b10aa643d973366dc2cb1ad94f99c1726a02343d43cbc011edbfac579e7c \ - --hash=sha256:c084ad935abe686bd9c898e62a02a19abfc9760b5a79bc29644463eaf2840cb0 \ - --hash=sha256:c73add4bb52a206fd0c0723432db123c0c75c280cbd67174dd9d2db228ebb1b4 \ - --hash=sha256:cae9c19ed12d4e8f3ebf46d1a75090e4c0dc16271c5bce1c833ac168f08fb614 \ - --hash=sha256:d20b797a5c1ad80c516e41bc1fb0443ddb5006e9aaa7bda2d71978346aeb9132 \ - --hash=sha256:d3d1654e11d724760cdb37a3d7691f0be9db5fbdaef59c9f532aabf87006dbaa \ - --hash=sha256:d878f2a6707cc9d53a1be1414bbb419e629c3d6e67f69230217bb663e76b5087 +tomli==2.4.1 \ + --hash=sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853 \ + --hash=sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe \ + --hash=sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5 \ + --hash=sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d \ + --hash=sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd \ + --hash=sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26 \ + --hash=sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54 \ + --hash=sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6 \ + --hash=sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c \ + --hash=sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a \ + --hash=sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd \ + --hash=sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f \ + --hash=sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5 \ + --hash=sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9 \ + --hash=sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662 \ + --hash=sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9 \ + --hash=sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1 \ + --hash=sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585 \ + --hash=sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e \ + --hash=sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c \ + --hash=sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41 \ + --hash=sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f \ + --hash=sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085 \ + --hash=sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15 \ + --hash=sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7 \ + --hash=sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c \ + --hash=sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36 \ + --hash=sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076 \ + --hash=sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac \ + --hash=sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8 \ + --hash=sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232 \ + --hash=sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece \ + --hash=sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a \ + --hash=sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897 \ + --hash=sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d \ + --hash=sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4 \ + --hash=sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917 \ + --hash=sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396 \ + --hash=sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a \ + --hash=sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc \ + --hash=sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba \ + --hash=sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f \ + --hash=sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257 \ + --hash=sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30 \ + --hash=sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf \ + --hash=sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9 \ + --hash=sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049 # via coverage ty==0.0.1a21 \ --hash=sha256:0efba2e52b58f536f4198ba5c4a36cac2ba67d83ec6f429ebc7704233bcda4c3 \ @@ -723,9 +746,9 @@ ty==0.0.1a21 \ --hash=sha256:e941e9a9d1e54b03eeaf9c3197c26a19cf76009fd5e41e16e5657c1c827bd6d3 \ --hash=sha256:ecf41706b803827b0de8717f32a434dad1e67be9f4b8caf403e12013179ea06a # via -r src/backend/requirements-dev.in -types-psycopg2==2.9.21.20251012 \ - --hash=sha256:4cdafd38927da0cfde49804f39ab85afd9c6e9c492800e42f1f0c1a1b0312935 \ - --hash=sha256:712bad5c423fe979e357edbf40a07ca40ef775d74043de72bd4544ca328cc57e +types-psycopg2==2.9.21.20260223 \ + --hash=sha256:78ed70de2e56bc6b5c26c8c1da8e9af54e49fdc3c94d1504609f3519e2b84f02 \ + --hash=sha256:c6228ade72d813b0624f4c03feeb89471950ac27cd0506b5debed6f053086bc8 # via django-types types-pyyaml==6.0.12.20250915 \ --hash=sha256:0f8b54a528c303f0e6f7165687dd33fafa81c807fcac23f632b63aa624ced1d3 \ @@ -745,9 +768,9 @@ urllib3==2.6.3 \ # via # -c src/backend/requirements.txt # requests -virtualenv==20.38.0 \ - --hash=sha256:94f39b1abaea5185bf7ea5a46702b56f1d0c9aa2f41a6c2b8b0af4ddc74c10a7 \ - --hash=sha256:d6e78e5889de3a4742df2d3d44e779366325a90cf356f15621fddace82431794 +virtualenv==21.2.0 \ + --hash=sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098 \ + --hash=sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f # via pre-commit wheel==0.46.3 \ --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ diff --git a/src/backend/requirements.in b/src/backend/requirements.in index 0336a282c8..203bc9d74e 100644 --- a/src/backend/requirements.in +++ b/src/backend/requirements.in @@ -14,8 +14,6 @@ django-ical # iCal export for calendar views django-maintenance-mode # Shut down application while reloading etc. django-mailbox # Email scraping django-markdownify # Markdown rendering -django-mptt # Modified Preorder Tree Traversal -django-markdownify # Markdown rendering django-money # Django app for currency management django-mptt # Modified Preorder Tree Traversal django-redis>=5.0.0 # Redis integration @@ -39,6 +37,7 @@ drf-spectacular # DRF API documentation feedparser # RSS newsfeed parser gunicorn # Gunicorn web server jinja2 # Jinja2 templating engine +nh3 # HTML sanitization (replaces bleach) pdf2image # PDF to image conversion pillow # Image manipulation pint # Unit conversion diff --git a/src/backend/requirements.txt b/src/backend/requirements.txt index e059b7be4c..9075ce453e 100644 --- a/src/backend/requirements.txt +++ b/src/backend/requirements.txt @@ -12,9 +12,9 @@ async-timeout==5.0.1 \ --hash=sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c \ --hash=sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3 # via redis -attrs==25.4.0 \ - --hash=sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11 \ - --hash=sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373 +attrs==26.1.0 \ + --hash=sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 \ + --hash=sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32 # via # jsonschema # referencing @@ -87,23 +87,23 @@ bcrypt==5.0.0 \ --hash=sha256:f8429e1c410b4073944f03bd778a9e066e7fad723564a52ff91841d278dfc822 \ --hash=sha256:fc746432b951e92b58317af8e0ca746efe93e66555f1b40888865ef5bf56446b # via paramiko -bleach[css]==6.3.0 \ - --hash=sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22 \ - --hash=sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6 +bleach==4.1.0 \ + --hash=sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da \ + --hash=sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994 # via django-markdownify -blessed==1.30.0 \ - --hash=sha256:4061a9f10dd22798716c2548ba36385af6a29d856c897f367c6ccc927e0b3a5a \ - --hash=sha256:4d547019d7b40fc5420ea2ba2bc180fdccc31d6715298e2b49ffa7b020d44667 +blessed==1.34.0 \ + --hash=sha256:3d17468c3d47e11ed8d6ca3da1270b8aba8ac8bd0a55a1f8189e4d04f223a1f0 \ + --hash=sha256:eb403f9ce2efab633bd1e7a05fbb35b979a7b9f213ddc41478dd55dd6999e8bf # via -r src/backend/requirements.in -boto3==1.42.58 \ - --hash=sha256:1bc5ff0b7a1a3f42b115481e269e1aada1d68bbfa80a989ac2882d51072907a3 \ - --hash=sha256:3a21b5bbc8bf8d6472a7ae7bdc77819b1f86f35d127f428f4603bed1b98122c0 +boto3==1.42.77 \ + --hash=sha256:95eb3ef693068586f70ca3f29c43701c34a9a73d0df413ea7eaff138efa4a6b9 \ + --hash=sha256:c6d9b05e5b86767d4c6ef762f155c891366e5951162f71d030e109fe531f4fd9 # via # django-anymail # django-storages -botocore==1.42.58 \ - --hash=sha256:3098178f4404cf85c8997ebb7948b3f267cff1dd191b08fc4ebb614ac1013a20 \ - --hash=sha256:55224d6a91afae0997e8bee62d1ef1ae2dcbc6c210516939b32a774b0b35bec5 +botocore==1.42.77 \ + --hash=sha256:807bc2c3825bec6f025506ceeba5f7f111a00de8d58f35c679ee16c8ff6e7b10 \ + --hash=sha256:cbb0ac410fab4aa0839a521329f970b271ec298d67465ed7fa7d095c0dad9f48 # via # boto3 # s3transfer @@ -304,171 +304,187 @@ cffi==2.0.0 \ # cryptography # pynacl # weasyprint -charset-normalizer==3.4.4 \ - --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ - --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ - --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ - --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ - --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \ - --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ - --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \ - --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \ - --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ - --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ - --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ - --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \ - --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ - --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \ - --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ - --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \ - --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ - --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ - --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ - --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ - --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \ - --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ - --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \ - --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ - --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \ - --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ - --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ - --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ - --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \ - --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ - --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ - --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ - --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \ - --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ - --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ - --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ - --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ - --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ - --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \ - --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ - --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ - --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ - --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ - --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ - --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ - --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \ - --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ - --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ - --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ - --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ - --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \ - --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \ - --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ - --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ - --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \ - --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ - --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ - --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ - --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ - --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ - --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ - --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ - --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ - --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ - --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ - --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ - --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ - --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ - --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ - --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ - --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \ - --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \ - --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ - --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ - --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ - --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ - --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \ - --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \ - --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ - --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ - --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \ - --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ - --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ - --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \ - --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ - --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ - --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \ - --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \ - --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \ - --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ - --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ - --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ - --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ - --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ - --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ - --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ - --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ - --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ - --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \ - --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \ - --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ - --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ - --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ - --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \ - --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ - --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ - --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ - --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ - --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \ - --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ - --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \ - --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ - --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 +charset-normalizer==3.4.6 \ + --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ + --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ + --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ + --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ + --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ + --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ + --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ + --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ + --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ + --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ + --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ + --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ + --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ + --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ + --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ + --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ + --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ + --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ + --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ + --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ + --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ + --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ + --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ + --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ + --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ + --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ + --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ + --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ + --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ + --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ + --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ + --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ + --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ + --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ + --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ + --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ + --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ + --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ + --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ + --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ + --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ + --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ + --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ + --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ + --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ + --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ + --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ + --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ + --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ + --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ + --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ + --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ + --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ + --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ + --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ + --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ + --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ + --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ + --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ + --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ + --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ + --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ + --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ + --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ + --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ + --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ + --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ + --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ + --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ + --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ + --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ + --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ + --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ + --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ + --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ + --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ + --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ + --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ + --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ + --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ + --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ + --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ + --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ + --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ + --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ + --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ + --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ + --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ + --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ + --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ + --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ + --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ + --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ + --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ + --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ + --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ + --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ + --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ + --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ + --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ + --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ + --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ + --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ + --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ + --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ + --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ + --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ + --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ + --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ + --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ + --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ + --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ + --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ + --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ + --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ + --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ + --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ + --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ + --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ + --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ + --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ + --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ + --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ + --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ + --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ + --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ + --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ + --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ + --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 # via requests -cryptography==46.0.5 \ - --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ - --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ - --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ - --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ - --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ - --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ - --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ - --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ - --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ - --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ - --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ - --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ - --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ - --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ - --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ - --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ - --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ - --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ - --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ - --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ - --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ - --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ - --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ - --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ - --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ - --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ - --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ - --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ - --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ - --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ - --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ - --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ - --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ - --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ - --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ - --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ - --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ - --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ - --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ - --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ - --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ - --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ - --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ - --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ - --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ - --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ - --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ - --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ - --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 +cryptography==46.0.7 \ + --hash=sha256:04959522f938493042d595a736e7dbdff6eb6cc2339c11465b3ff89343b65f65 \ + --hash=sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832 \ + --hash=sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067 \ + --hash=sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de \ + --hash=sha256:258514877e15963bd43b558917bc9f54cf7cf866c38aa576ebf47a77ddbc43a4 \ + --hash=sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0 \ + --hash=sha256:397655da831414d165029da9bc483bed2fe0e75dde6a1523ec2fe63f3c46046b \ + --hash=sha256:3986ac1dee6def53797289999eabe84798ad7817f3e97779b5061a95b0ee4968 \ + --hash=sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef \ + --hash=sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b \ + --hash=sha256:462ad5cb1c148a22b2e3bcc5ad52504dff325d17daf5df8d88c17dda1f75f2a4 \ + --hash=sha256:506c4ff91eff4f82bdac7633318a526b1d1309fc07ca76a3ad182cb5b686d6d3 \ + --hash=sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308 \ + --hash=sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e \ + --hash=sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163 \ + --hash=sha256:60627cf07e0d9274338521205899337c5d18249db56865f943cbe753aa96f40f \ + --hash=sha256:65814c60f8cc400c63131584e3e1fad01235edba2614b61fbfbfa954082db0ee \ + --hash=sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77 \ + --hash=sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85 \ + --hash=sha256:80406c3065e2c55d7f49a9550fe0c49b3f12e5bfff5dedb727e319e1afb9bf99 \ + --hash=sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7 \ + --hash=sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83 \ + --hash=sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85 \ + --hash=sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006 \ + --hash=sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb \ + --hash=sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e \ + --hash=sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba \ + --hash=sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325 \ + --hash=sha256:b7b412817be92117ec5ed95f880defe9cf18a832e8cafacf0a22337dc1981b4d \ + --hash=sha256:c5b1ccd1239f48b7151a65bc6dd54bcfcc15e028c8ac126d3fada09db0e07ef1 \ + --hash=sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1 \ + --hash=sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2 \ + --hash=sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0 \ + --hash=sha256:d02c738dacda7dc2a74d1b2b3177042009d5cab7c7079db74afc19e56ca1b455 \ + --hash=sha256:d151173275e1728cf7839aaa80c34fe550c04ddb27b34f48c232193df8db5842 \ + --hash=sha256:d23c8ca48e44ee015cd0a54aeccdf9f09004eba9fc96f38c911011d9ff1bd457 \ + --hash=sha256:d3b99c535a9de0adced13d159c5a9cf65c325601aa30f4be08afd680643e9c15 \ + --hash=sha256:d5f7520159cd9c2154eb61eb67548ca05c5774d39e9c2c4339fd793fe7d097b2 \ + --hash=sha256:db0f493b9181c7820c8134437eb8b0b4792085d37dbb24da050476ccb664e59c \ + --hash=sha256:e06acf3c99be55aa3b516397fe42f5855597f430add9c17fa46bf2e0fb34c9bb \ + --hash=sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5 \ + --hash=sha256:ea42cbe97209df307fdc3b155f1b6fa2577c0defa8f1f7d3be7d31d189108ad4 \ + --hash=sha256:ebd6daf519b9f189f85c479427bbd6e9c9037862cf8fe89ee35503bd209ed902 \ + --hash=sha256:f247c8c1a1fb45e12586afbb436ef21ff1e80670b2861a90353d9b025583d246 \ + --hash=sha256:fbfd0e5f273877695cb93baf14b185f4878128b250cc9f8e617ea0c025dfb022 \ + --hash=sha256:fc9ab8856ae6cf7c9358430e49b368f3108f050031442eaeb6b9d87e4dcf4e4f \ + --hash=sha256:fcd8eac50d9138c1d7fc53a653ba60a2bee81a505f9f8850b6b2888555a45d0e \ + --hash=sha256:fdd1736fed309b4300346f88f74cd120c27c56852c3838cab416e7a166f67298 \ + --hash=sha256:ffca7aa1d00cf7d6469b988c581598f2259e46215e0140af408966a24cf086ce # via # -r src/backend/requirements.in # django-anymail @@ -485,9 +501,9 @@ defusedxml==0.7.1 \ --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 # via python3-openid -django==5.2.12 \ - --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ - --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb +django==5.2.13 \ + --hash=sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a \ + --hash=sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4 # via # -r src/backend/requirements.in # django-allauth @@ -569,9 +585,9 @@ django-maintenance-mode==0.22.0 \ --hash=sha256:502f04f845d6996e8add321186b3b9236c3702de7cb0ab14952890af6523b9e5 \ --hash=sha256:a9cf2ba79c9945bd67f98755a6cfd281869d39b3745bbb5d1f571d058657aa85 # via -r src/backend/requirements.in -django-markdownify==0.9.6 \ - --hash=sha256:9863b2bfa6d159ad1423dc93bf0d6eadc6413776de304049aa9fcfa5edd2ce1c \ - --hash=sha256:edcf47b2026d55a8439049d35c8b54e11066a4856c4fad1060e139cb3d2eee52 +django-markdownify==0.9.1 \ + --hash=sha256:06ff2994ff09ce030b50de8c6fc5b89b9c25a66796948aff55370716ca1233af \ + --hash=sha256:24ba68b8a5996b6ec9632d11a3fd2e7159cb7e6becd3104e0a9372b5a2a148ef # via -r src/backend/requirements.in django-money==3.6.0 \ --hash=sha256:94402f2831f2726b94ef2da35b4059441b4c0aedfc47b312472200d4ffdf8d73 \ @@ -638,9 +654,9 @@ django-taggit==6.1.0 \ django-xforwardedfor-middleware==2.0 \ --hash=sha256:16fd1cb27f33a5541b6f3e0b43afb1b7334a76f27a1255b69e14ec5c440f0b24 # via -r src/backend/requirements.in -djangorestframework==3.16.1 \ - --hash=sha256:166809528b1aced0a17dc66c24492af18049f2c9420dbd0be29422029cfc3ff7 \ - --hash=sha256:33a59f47fb9c85ede792cbf88bde71893bcda0667bc573f784649521f1102cec +djangorestframework==3.17.1 \ + --hash=sha256:a6def5f447fe78ff853bff1d47a3c59bf38f5434b031780b351b0c73a62db1a5 \ + --hash=sha256:c3c74dd3e83a5a3efc37b3c18d92bd6f86a6791c7b7d4dff62bb068500e76457 # via # -r src/backend/requirements.in # djangorestframework-simplejwt @@ -715,61 +731,61 @@ flexparser==0.4 \ --hash=sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2 \ --hash=sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846 # via pint -fonttools[woff]==4.61.1 \ - --hash=sha256:0de30bfe7745c0d1ffa2b0b7048fb7123ad0d71107e10ee090fa0b16b9452e87 \ - --hash=sha256:10d88e55330e092940584774ee5e8a6971b01fc2f4d3466a1d6c158230880796 \ - --hash=sha256:11f35ad7805edba3aac1a3710d104592df59f4b957e30108ae0ba6c10b11dd75 \ - --hash=sha256:15acc09befd16a0fb8a8f62bc147e1a82817542d72184acca9ce6e0aeda9fa6d \ - --hash=sha256:17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371 \ - --hash=sha256:2180f14c141d2f0f3da43f3a81bc8aa4684860f6b0e6f9e165a4831f24e6a23b \ - --hash=sha256:21e7c8d76f62ab13c9472ccf74515ca5b9a761d1bde3265152a6dc58700d895b \ - --hash=sha256:41a7170d042e8c0024703ed13b71893519a1a6d6e18e933e3ec7507a2c26a4b2 \ - --hash=sha256:41ed4b5ec103bd306bb68f81dc166e77409e5209443e5773cb4ed837bcc9b0d3 \ - --hash=sha256:497c31ce314219888c0e2fce5ad9178ca83fe5230b01a5006726cdf3ac9f24d9 \ - --hash=sha256:4c1b526c8d3f615a7b1867f38a9410849c8f4aef078535742198e942fba0e9bd \ - --hash=sha256:4d7092bb38c53bbc78e9255a59158b150bcdc115a1e3b3ce0b5f267dc35dd63c \ - --hash=sha256:4f5686e1fe5fce75d82d93c47a438a25bf0d1319d2843a926f741140b2b16e0c \ - --hash=sha256:58b0ee0ab5b1fc9921eccfe11d1435added19d6494dde14e323f25ad2bc30c56 \ - --hash=sha256:5ce02f38a754f207f2f06557523cd39a06438ba3aafc0639c477ac409fc64e37 \ - --hash=sha256:5fade934607a523614726119164ff621e8c30e8fa1ffffbbd358662056ba69f0 \ - --hash=sha256:5fe9fd43882620017add5eabb781ebfbc6998ee49b35bd7f8f79af1f9f99a958 \ - --hash=sha256:64102ca87e84261419c3747a0d20f396eb024bdbeb04c2bfb37e2891f5fadcb5 \ - --hash=sha256:664c5a68ec406f6b1547946683008576ef8b38275608e1cee6c061828171c118 \ - --hash=sha256:6675329885c44657f826ef01d9e4fb33b9158e9d93c537d84ad8399539bc6f69 \ - --hash=sha256:75c1a6dfac6abd407634420c93864a1e274ebc1c7531346d9254c0d8f6ca00f9 \ - --hash=sha256:75da8f28eff26defba42c52986de97b22106cb8f26515b7c22443ebc9c2d3261 \ - --hash=sha256:77efb033d8d7ff233385f30c62c7c79271c8885d5c9657d967ede124671bbdfb \ - --hash=sha256:78a7d3ab09dc47ac1a363a493e6112d8cabed7ba7caad5f54dbe2f08676d1b47 \ - --hash=sha256:7c7db70d57e5e1089a274cbb2b1fd635c9a24de809a231b154965d415d6c6d24 \ - --hash=sha256:8c56c488ab471628ff3bfa80964372fc13504ece601e0d97a78ee74126b2045c \ - --hash=sha256:91669ccac46bbc1d09e9273546181919064e8df73488ea087dcac3e2968df9ba \ - --hash=sha256:9b666a475a65f4e839d3d10473fad6d47e0a9db14a2f4a224029c5bfde58ad2c \ - --hash=sha256:9cfef3ab326780c04d6646f68d4b4742aae222e8b8ea1d627c74e38afcbc9d91 \ - --hash=sha256:a13fc8aeb24bad755eea8f7f9d409438eb94e82cf86b08fe77a03fbc8f6a96b1 \ - --hash=sha256:a75c301f96db737e1c5ed5fd7d77d9c34466de16095a266509e13da09751bd19 \ - --hash=sha256:a76d4cb80f41ba94a6691264be76435e5f72f2cb3cab0b092a6212855f71c2f6 \ - --hash=sha256:aed04cabe26f30c1647ef0e8fbb207516fd40fe9472e9439695f5c6998e60ac5 \ - --hash=sha256:b148b56f5de675ee16d45e769e69f87623a4944f7443850bf9a9376e628a89d2 \ - --hash=sha256:b501c862d4901792adaec7c25b1ecc749e2662543f68bb194c42ba18d6eec98d \ - --hash=sha256:b846a1fcf8beadeb9ea4f44ec5bdde393e2f1569e17d700bfc49cd69bde75881 \ - --hash=sha256:b931ae8f62db78861b0ff1ac017851764602288575d65b8e8ff1963fed419063 \ - --hash=sha256:c33ab3ca9d3ccd581d58e989d67554e42d8d4ded94ab3ade3508455fe70e65f7 \ - --hash=sha256:c6604b735bb12fef8e0efd5578c9fb5d3d8532d5001ea13a19cddf295673ee09 \ - --hash=sha256:d8db08051fc9e7d8bc622f2112511b8107d8f27cd89e2f64ec45e9825e8288da \ - --hash=sha256:d9203500f7c63545b4ce3799319fe4d9feb1a1b89b28d3cb5abd11b9dd64147e \ - --hash=sha256:dc492779501fa723b04d0ab1f5be046797fee17d27700476edc7ee9ae535a61e \ - --hash=sha256:e6bcdf33aec38d16508ce61fd81838f24c83c90a1d1b8c68982857038673d6b8 \ - --hash=sha256:e76ce097e3c57c4bcb67c5aa24a0ecdbd9f74ea9219997a707a4061fbe2707aa \ - --hash=sha256:eff1ac3cc66c2ac7cda1e64b4e2f3ffef474b7335f92fc3833fc632d595fcee6 \ - --hash=sha256:f3cb4a569029b9f291f88aafc927dd53683757e640081ca8c412781ea144565e \ - --hash=sha256:f79b168428351d11e10c5aeb61a74e1851ec221081299f4cf56036a95431c43a \ - --hash=sha256:fa646ecec9528bef693415c79a86e733c70a4965dd938e9a226b0fc64c9d2e6c \ - --hash=sha256:fe2efccb324948a11dd09d22136fe2ac8a97d6c1347cf0b58a911dcd529f66b7 \ - --hash=sha256:fff4f534200a04b4a36e7ae3cb74493afe807b517a09e99cb4faa89a34ed6ecd +fonttools[woff]==4.62.1 \ + --hash=sha256:0aa72c43a601cfa9273bb1ae0518f1acadc01ee181a6fc60cd758d7fdadffc04 \ + --hash=sha256:0b3ae47e8636156a9accff64c02c0924cbebad62854c4a6dbdc110cd5b4b341a \ + --hash=sha256:12859ff0b47dd20f110804c3e0d0970f7b832f561630cd879969011541a464a9 \ + --hash=sha256:149f7d84afca659d1a97e39a4778794a2f83bf344c5ee5134e09995086cc2392 \ + --hash=sha256:1596aeaddf7f78e21e68293c011316a25267b3effdaccaf4d59bc9159d681b82 \ + --hash=sha256:19177c8d96c7c36359266e571c5173bcee9157b59cfc8cb0153c5673dc5a3a7d \ + --hash=sha256:1c5c25671ce8805e0d080e2ffdeca7f1e86778c5cbfbeae86d7f866d8830517b \ + --hash=sha256:1eecc128c86c552fb963fe846ca4e011b1be053728f798185a1687502f6d398e \ + --hash=sha256:268abb1cb221e66c014acc234e872b7870d8b5d4657a83a8f4205094c32d2416 \ + --hash=sha256:2d850f66830a27b0d498ee05adb13a3781637b1826982cd7e2b3789ef0cc71ae \ + --hash=sha256:2e7abd2b1e11736f58c1de27819e1955a53267c21732e78243fa2fa2e5c1e069 \ + --hash=sha256:403d28ce06ebfc547fbcb0cb8b7f7cc2f7a2d3e1a67ba9a34b14632df9e080f9 \ + --hash=sha256:40975849bac44fb0b9253d77420c6d8b523ac4dcdcefeff6e4d706838a5b80f7 \ + --hash=sha256:486f32c8047ccd05652aba17e4a8819a3a9d78570eb8a0e3b4503142947880ed \ + --hash=sha256:49a445d2f544ce4a69338694cad575ba97b9a75fff02720da0882d1a73f12800 \ + --hash=sha256:59b372b4f0e113d3746b88985f1c796e7bf830dd54b28374cd85c2b8acd7583e \ + --hash=sha256:5a648bde915fba9da05ae98856987ca91ba832949a9e2888b48c47ef8b96c5a9 \ + --hash=sha256:5f37df1cac61d906e7b836abe356bc2f34c99d4477467755c216b72aa3dc748b \ + --hash=sha256:6706d1cb1d5e6251a97ad3c1b9347505c5615c112e66047abbef0f8545fa30d1 \ + --hash=sha256:68959f5fc58ed4599b44aad161c2837477d7f35f5f79402d97439974faebfebe \ + --hash=sha256:6acb4109f8bee00fec985c8c7afb02299e35e9c94b57287f3ea542f28bd0b0a7 \ + --hash=sha256:7487782e2113861f4ddcc07c3436450659e3caa5e470b27dc2177cade2d8e7fd \ + --hash=sha256:7aa21ff53e28a9c2157acbc44e5b401149d3c9178107130e82d74ceb500e5056 \ + --hash=sha256:7bca7a1c1faf235ffe25d4f2e555246b4750220b38de8261d94ebc5ce8a23c23 \ + --hash=sha256:8d337fdd49a79b0d51c4da87bc38169d21c3abbf0c1aa9367eff5c6656fb6dae \ + --hash=sha256:8f8fca95d3bb3208f59626a4b0ea6e526ee51f5a8ad5d91821c165903e8d9260 \ + --hash=sha256:90365821debbd7db678809c7491ca4acd1e0779b9624cdc6ddaf1f31992bf974 \ + --hash=sha256:92bb00a947e666169c99b43753c4305fc95a890a60ef3aeb2a6963e07902cc87 \ + --hash=sha256:93c316e0f5301b2adbe6a5f658634307c096fd5aae60a5b3412e4f3e1728ab24 \ + --hash=sha256:942b03094d7edbb99bdf1ae7e9090898cad7bf9030b3d21f33d7072dbcb51a53 \ + --hash=sha256:9c125ffa00c3d9003cdaaf7f2c79e6e535628093e14b5de1dccb08859b680936 \ + --hash=sha256:9dde91633f77fa576879a0c76b1d89de373cae751a98ddf0109d54e173b40f14 \ + --hash=sha256:9e7863e10b3de72376280b515d35b14f5eeed639d1aa7824f4cf06779ec65e42 \ + --hash=sha256:a24decd24d60744ee8b4679d38e88b8303d86772053afc29b19d23bb8207803c \ + --hash=sha256:a5d8825e1140f04e6c99bb7d37a9e31c172f3bc208afbe02175339e699c710e1 \ + --hash=sha256:aa69d10ed420d8121118e628ad47d86e4caa79ba37f968597b958f6cceab7eca \ + --hash=sha256:ad5cca75776cd453b1b035b530e943334957ae152a36a88a320e779d61fc980c \ + --hash=sha256:b4e0fcf265ad26e487c56cb12a42dffe7162de708762db951e1b3f755319507d \ + --hash=sha256:b820fcb92d4655513d8402d5b219f94481c4443d825b4372c75a2072aa4b357a \ + --hash=sha256:bd13b7999d59c5eb1c2b442eb2d0c427cb517a0b7a1f5798fc5c9e003f5ff782 \ + --hash=sha256:bdfe592802ef939a0e33106ea4a318eeb17822c7ee168c290273cbd5fabd746c \ + --hash=sha256:c05557a78f8fa514da0f869556eeda40887a8abc77c76ee3f74cf241778afd5a \ + --hash=sha256:c22b1014017111c401469e3acc5433e6acf6ebcc6aa9efb538a533c800971c79 \ + --hash=sha256:c9b9e288b4da2f64fd6180644221749de651703e8d0c16bd4b719533a3a7d6e3 \ + --hash=sha256:d241cdc4a67b5431c6d7f115fdf63335222414995e3a1df1a41e1182acd4bcc7 \ + --hash=sha256:e54c75fd6041f1122476776880f7c3c3295ffa31962dc6ebe2543c00dca58b5d \ + --hash=sha256:e8514f4924375f77084e81467e63238b095abda5107620f49421c368a6017ed2 \ + --hash=sha256:ee91628c08e76f77b533d65feb3fbe6d9dad699f95be51cf0d022db94089cdc4 \ + --hash=sha256:ef46db46c9447103b8f3ff91e8ba009d5fe181b1920a83757a5762551e32bb68 \ + --hash=sha256:fa1d16210b6b10a826d71bed68dd9ec24a9e218d5a5e2797f37c573e7ec215ca # via weasyprint -googleapis-common-protos==1.72.0 \ - --hash=sha256:4299c5a82d5ae1a9702ada957347726b167f9f8d1fc352477702a1e851ff4038 \ - --hash=sha256:e55a601c1b32b52d7a3e65f43563e2aa61bcd737998ee672ac9b951cd49319f5 +googleapis-common-protos==1.73.1 \ + --hash=sha256:13114f0e9d2391756a0194c3a8131974ed7bffb06086569ba193364af59163b6 \ + --hash=sha256:e51f09eb0a43a8602f5a915870972e6b4a394088415c79d79605a46d8e826ee8 # via # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http @@ -838,13 +854,13 @@ grpcio==1.78.0 \ # via # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc -gunicorn==25.1.0 \ - --hash=sha256:1426611d959fa77e7de89f8c0f32eed6aa03ee735f98c01efba3e281b1c47616 \ - --hash=sha256:d0b1236ccf27f72cfe14bce7caadf467186f19e865094ca84221424e839b8b8b +gunicorn==25.3.0 \ + --hash=sha256:cacea387dab08cd6776501621c295a904fe8e3b7aae9a1a3cbb26f4e7ed54660 \ + --hash=sha256:f74e1b2f9f76f6cd1ca01198968bd2dd65830edc24b6e8e4d78de8320e2fe889 # via -r src/backend/requirements.in -icalendar==7.0.2 \ - --hash=sha256:ad31a5825b39522a30b073c6ced3ffcdf6c02cbb7dab69ba2e4de32ddbf77cc9 \ - --hash=sha256:de844ff5cde32f539bea7644e36d8494032a926b933bedb92621f2f239760806 +icalendar==7.0.3 \ + --hash=sha256:8c9fea6d3a89671bba8b6938d8565b4d0ec465c6a2796ef0f92790dcb9e627cd \ + --hash=sha256:95027ece087ab87184d765f03761f25875821f74cdd18d3b57e9c868216d8fde # via django-ical idna==3.11 \ --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ @@ -886,9 +902,9 @@ jsonschema-specifications==2025.9.1 \ --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d # via jsonschema -jwcrypto==1.5.6 \ - --hash=sha256:150d2b0ebbdb8f40b77f543fb44ffd2baeff48788be71f67f03566692fd55789 \ - --hash=sha256:771a87762a0c081ae6166958a954f80848820b2ab066937dc8b8379d65b1b039 +jwcrypto==1.5.7 \ + --hash=sha256:70204d7cca406eda8c82352e3c41ba2d946610dafd19e54403f0a1f4f18633c6 \ + --hash=sha256:729463fefe28b6de5cf1ebfda3e94f1a1b41d2799148ef98a01cb9678ebe2bb0 # via django-oauth-toolkit lxml==6.0.2 \ --hash=sha256:058027e261afed589eddcfe530fcc6f3402d7fd7e89bfd0532df82ebc1563dba \ @@ -1129,6 +1145,35 @@ markupsafe==3.0.3 \ --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 # via jinja2 +nh3==0.3.4 \ + --hash=sha256:07999b998bf89692738f15c0eac76a416382932f855709e0b7488b595c30ec89 \ + --hash=sha256:0961a27dc2057c38d0364cb05880e1997ae1c80220cbc847db63213720b8f304 \ + --hash=sha256:0d825722a1e8cbc87d7ca1e47ffb1d2a6cf343ad4c1b8465becf7cadcabcdfd0 \ + --hash=sha256:18a2e44ccb29cbb45071b8f3f2dab9ebfb41a6516f328f91f1f1fd18196239a4 \ + --hash=sha256:3390e4333883673a684ce16c1716b481e91782d6f56dec5c85fed9feedb23382 \ + --hash=sha256:41e46b3499918ab6128b6421677b316e79869d0c140da24069d220a94f4e72d1 \ + --hash=sha256:43ad4eedee7e049b9069bc015b7b095d320ed6d167ecec111f877de1540656e9 \ + --hash=sha256:47d749d99ae005ab19517224140b280dd56e77b33afb82f9b600e106d0458003 \ + --hash=sha256:4aa8b43e68c26b68069a3b6cef09de166d1d7fa140cf8d77e409a46cbf742e44 \ + --hash=sha256:554cc2bab281758e94d770c3fb0bf2d8be5fb403ef6b2e8841dd7c1615df7a0f \ + --hash=sha256:72e4e9ca1c4bd41b4a28b0190edc2e21e3f71496acd36a0162858e1a28db3d7e \ + --hash=sha256:75643c22f5092d8e209f766ee8108c400bc1e44760fc94d2d638eb138d18f853 \ + --hash=sha256:7cae217f031809321db962cd7e092bda8d4e95a87f78c0226628fa6c2ea8ebc5 \ + --hash=sha256:80b955d802bf365bd42e09f6c3d64567dce777d20e97968d94b3e9d9e99b265e \ + --hash=sha256:87dac8d611b4a478400e0821a13b35770e88c266582f065e7249d6a37b0f86e8 \ + --hash=sha256:883d5a6d6ee8078c4afc8e96e022fe579c4c265775ff6ee21e39b8c542cabab3 \ + --hash=sha256:8b61058f34c2105d44d2a4d4241bacf603a1ef5c143b08766bbd0cf23830118f \ + --hash=sha256:8d697e19f2995b337f648204848ac3a528eaafffc39e7ce4ac6b7a2fbe6c84af \ + --hash=sha256:9337517edb7c10228252cce2898e20fb3d77e32ffaccbb3c66897927d74215a0 \ + --hash=sha256:96709a379997c1b28c8974146ca660b0dcd3794f4f6d50c1ea549bab39ac6ade \ + --hash=sha256:c10b1f0c741e257a5cb2978d6bac86e7c784ab20572724b20c6402c2e24bce75 \ + --hash=sha256:ca90397c8d36c1535bf1988b2bed006597337843a164c7ec269dc8813f37536b \ + --hash=sha256:d866701affe67a5171b916b5c076e767a74c6a9efb7fb2006eb8d3c5f9a293d5 \ + --hash=sha256:d8bebcb20ab4b91858385cd98fe58046ec4a624275b45ef9b976475604f45b49 \ + --hash=sha256:dbe76feaa44e2ef9436f345016012a591550e77818876a8de5c8bc2a248e08df \ + --hash=sha256:f5f214618ad5eff4f2a6b13a8d4da4d9e7f37c569d90a13fb9f0caaf7d04fe21 \ + --hash=sha256:f987cb56458323405e8e5ea827e1befcf141ffa0c0ac797d6d02e6b646056d9a + # via -r src/backend/requirements.in oauthlib==3.3.1 \ --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 @@ -1139,9 +1184,9 @@ openpyxl==3.1.5 \ --hash=sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2 \ --hash=sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050 # via tablib -opentelemetry-api==1.39.1 \ - --hash=sha256:2edd8463432a7f8443edce90972169b195e7d6a05500cd29e6d13898187c9950 \ - --hash=sha256:fbde8c80e1b937a2c61f20347e91c0c18a1940cecf012d62e65a7caf08967c9c +opentelemetry-api==1.40.0 \ + --hash=sha256:159be641c0b04d11e9ecd576906462773eb97ae1b657730f0ecf64d32071569f \ + --hash=sha256:82dd69331ae74b06f6a874704be0cfaa49a1650e1537d4a813b86ecef7d0ecf9 # via # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc @@ -1158,27 +1203,27 @@ opentelemetry-api==1.39.1 \ # opentelemetry-instrumentation-wsgi # opentelemetry-sdk # opentelemetry-semantic-conventions -opentelemetry-exporter-otlp==1.39.1 \ - --hash=sha256:68ae69775291f04f000eb4b698ff16ff685fdebe5cb52871bc4e87938a7b00fe \ - --hash=sha256:7cf7470e9fd0060c8a38a23e4f695ac686c06a48ad97f8d4867bc9b420180b9c +opentelemetry-exporter-otlp==1.40.0 \ + --hash=sha256:48c87e539ec9afb30dc443775a1334cc5487de2f72a770a4c00b1610bf6c697d \ + --hash=sha256:7caa0870b95e2fcb59d64e16e2b639ecffb07771b6cd0000b5d12e5e4fef765a # via -r src/backend/requirements.in -opentelemetry-exporter-otlp-proto-common==1.39.1 \ - --hash=sha256:08f8a5862d64cc3435105686d0216c1365dc5701f86844a8cd56597d0c764fde \ - --hash=sha256:763370d4737a59741c89a67b50f9e39271639ee4afc999dadfe768541c027464 +opentelemetry-exporter-otlp-proto-common==1.40.0 \ + --hash=sha256:1cbee86a4064790b362a86601ee7934f368b81cd4cc2f2e163902a6e7818a0fa \ + --hash=sha256:7081ff453835a82417bf38dccf122c827c3cbc94f2079b03bba02a3165f25149 # via # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-exporter-otlp-proto-grpc==1.39.1 \ - --hash=sha256:772eb1c9287485d625e4dbe9c879898e5253fea111d9181140f51291b5fec3ad \ - --hash=sha256:fa1c136a05c7e9b4c09f739469cbdb927ea20b34088ab1d959a849b5cc589c18 +opentelemetry-exporter-otlp-proto-grpc==1.40.0 \ + --hash=sha256:2aa0ca53483fe0cf6405087a7491472b70335bc5c7944378a0a8e72e86995c52 \ + --hash=sha256:bd4015183e40b635b3dab8da528b27161ba83bf4ef545776b196f0fb4ec47740 # via opentelemetry-exporter-otlp -opentelemetry-exporter-otlp-proto-http==1.39.1 \ - --hash=sha256:31bdab9745c709ce90a49a0624c2bd445d31a28ba34275951a6a362d16a0b9cb \ - --hash=sha256:d9f5207183dd752a412c4cd564ca8875ececba13be6e9c6c370ffb752fd59985 +opentelemetry-exporter-otlp-proto-http==1.40.0 \ + --hash=sha256:a8d1dab28f504c5d96577d6509f80a8150e44e8f45f82cdbe0e34c99ab040069 \ + --hash=sha256:db48f5e0f33217588bbc00274a31517ba830da576e59503507c839b38fa0869c # via opentelemetry-exporter-otlp -opentelemetry-instrumentation==0.60b1 \ - --hash=sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d \ - --hash=sha256:57ddc7974c6eb35865af0426d1a17132b88b2ed8586897fee187fd5b8944bd6a +opentelemetry-instrumentation==0.61b0 \ + --hash=sha256:92a93a280e69788e8f88391247cc530fd81f16f2b011979d4d6398f805cfbc63 \ + --hash=sha256:cb21b48db738c9de196eba6b805b4ff9de3b7f187e4bbf9a466fa170514f1fc7 # via # opentelemetry-instrumentation-dbapi # opentelemetry-instrumentation-django @@ -1189,64 +1234,64 @@ opentelemetry-instrumentation==0.60b1 \ # opentelemetry-instrumentation-sqlite3 # opentelemetry-instrumentation-system-metrics # opentelemetry-instrumentation-wsgi -opentelemetry-instrumentation-dbapi==0.60b1 \ - --hash=sha256:5577189f678de5b9828c930c8fb72e8f1999b304131777b60099e5c4b3948193 \ - --hash=sha256:a239d328249b86fba5e42900b98bf31ee99c07092530feca18afde92c600f901 +opentelemetry-instrumentation-dbapi==0.61b0 \ + --hash=sha256:02fa800682c1de87dcad0e59f2092b3b6fb8b8ea0636518f989e1166b418dcb9 \ + --hash=sha256:8f762c39c8edd20c6aef3282550a2cfbfec76c3f431bf5c36327dcf9ece2e5a0 # via # opentelemetry-instrumentation-psycopg # opentelemetry-instrumentation-pymysql # opentelemetry-instrumentation-sqlite3 -opentelemetry-instrumentation-django==0.60b1 \ - --hash=sha256:3f6b4ba201eee35406dab965b254eed0c64fa1ef42e4a7b0296ad1b30e8e3f81 \ - --hash=sha256:765b69c7ccdea7e9ebfd0b9e68387956b8f74816f3e39775d5b06a20f16b0522 +opentelemetry-instrumentation-django==0.61b0 \ + --hash=sha256:26c1b0b325a9783d4a2f4df660ba05cf929c3eda2ae9b07916b649bb44e1c5b6 \ + --hash=sha256:9885154dc128578de0e6b5ce49e965c786f8ab071175bec005dcd454510be951 # via -r src/backend/requirements.in -opentelemetry-instrumentation-psycopg==0.60b1 \ - --hash=sha256:67fa627561f00b903020843b9254a1be6f3f8c64501033afe629a574a2325ec2 \ - --hash=sha256:c13a81a898307ebdaa8aa4a0ac17753cb308270fcb07a17a857f74b6021b5a12 +opentelemetry-instrumentation-psycopg==0.61b0 \ + --hash=sha256:74e9fed3802945f7ae335cffc30fd18cf58c34a4d0619315f799fa21eb5c74ff \ + --hash=sha256:a3e242cad56c0ad4f4f872017c73ce7e6c7012081dda6bd0d776c127fedc358a # via -r src/backend/requirements.in -opentelemetry-instrumentation-pymysql==0.60b1 \ - --hash=sha256:3f3b237a7666600a5e9186053acb10df302c61dc7113430cb1b2f7d1f24f8971 \ - --hash=sha256:bc62a5089a9f5216b027fc9a09253404e7dc325dbc776d49ab41fd2c787b4667 +opentelemetry-instrumentation-pymysql==0.61b0 \ + --hash=sha256:00aca55c3fd767ebe484affa2f0c2f47edd4095038b509c6aca1a4cfed78af15 \ + --hash=sha256:60ba66a806e4664308bd86fe45f329a6f3bb520c3e9759f68f379b7c9466047f # via -r src/backend/requirements.in -opentelemetry-instrumentation-redis==0.60b1 \ - --hash=sha256:33bef0ff9af6f2d88de90c1cd7e25675c10a16d4f9ee5ae7592b28bb08b78139 \ - --hash=sha256:ecafa8f81c88917b59f0d842fb3d157f3a8edc71fb4b85bebca3bc19432ce7b8 +opentelemetry-instrumentation-redis==0.61b0 \ + --hash=sha256:8d4e850bbb5f8eeafa44c0eac3a007990c7125de187bc9c3659e29ff7e091172 \ + --hash=sha256:ae0fbb56be9a641e621d55b02a7d62977a2c77c5ee760addd79b9b266e46e523 # via -r src/backend/requirements.in -opentelemetry-instrumentation-requests==0.60b1 \ - --hash=sha256:9a1063c16c44a3ba6e81870c4fa42a0fac3ecef5a4d60a11d0976eec9046f3d4 \ - --hash=sha256:eec9fac3fab84737f663a2e08b12cb095b4bd67643b24587a8ecfa3cf4d0ca4c +opentelemetry-instrumentation-requests==0.61b0 \ + --hash=sha256:15f879ce8fb206bd7e6fdc61663ea63481040a845218c0cf42902ce70bd7e9d9 \ + --hash=sha256:cce19b379949fe637eb73ba39b02c57d2d0805447ca6d86534aa33fcb141f683 # via -r src/backend/requirements.in -opentelemetry-instrumentation-sqlite3==0.60b1 \ - --hash=sha256:7666853b9df186b81e587320aaa03da3f1ce46ba9277b62d8ea20a745886031c \ - --hash=sha256:d716b9d89d31dc426ccedefcdbf96cba1897dfe020d21e5e5ea82a782d03e1d6 +opentelemetry-instrumentation-sqlite3==0.61b0 \ + --hash=sha256:202a18e7f9d231bfa44771fdb068bff16f24a6fa5e424a0df4d9232b1a818693 \ + --hash=sha256:96d4f0fa35ba7ee9aa683aa17726cb358c8029cc7b3cf55668ccc77254c29ca5 # via -r src/backend/requirements.in -opentelemetry-instrumentation-system-metrics==0.60b1 \ - --hash=sha256:21fb040ed6cfabc8ca97c63548fd01689f7ec92c64bbc6cfd08f30489a336fc6 \ - --hash=sha256:b9c3a40f31f20c694c386bd28fa0eed5268532bb78f545bbd8e23bbe99d81e09 +opentelemetry-instrumentation-system-metrics==0.61b0 \ + --hash=sha256:3eb55f9a058797cf915946cbb7445e00b31316ac3e55050475792edf3367c321 \ + --hash=sha256:7d4fe3e0ce14e0e6eb18f5826100d6cc1af662e5a8ebc74e9b91fe23f192f3e8 # via -r src/backend/requirements.in -opentelemetry-instrumentation-wsgi==0.60b1 \ - --hash=sha256:5e7b432778ebf5a39af136227884a6ab2efc3c4e73e2dbb1d05ecf03ea196705 \ - --hash=sha256:eb553eec7ebfcf2945cc10d787a265e7abadb9ed1d1ebce8b13988d44fa0cf45 +opentelemetry-instrumentation-wsgi==0.61b0 \ + --hash=sha256:380f2ae61714e5303275a80b2e14c58571573cd1fddf496d8c39fb9551c5e532 \ + --hash=sha256:bd33b0824166f24134a3400648805e8d2e6a7951f070241294e8b8866611d7fa # via # -r src/backend/requirements.in # opentelemetry-instrumentation-django -opentelemetry-proto==1.39.1 \ - --hash=sha256:22cdc78efd3b3765d09e68bfbd010d4fc254c9818afd0b6b423387d9dee46007 \ - --hash=sha256:6c8e05144fc0d3ed4d22c2289c6b126e03bcd0e6a7da0f16cedd2e1c2772e2c8 +opentelemetry-proto==1.40.0 \ + --hash=sha256:03f639ca129ba513f5819810f5b1f42bcb371391405d99c168fe6937c62febcd \ + --hash=sha256:266c4385d88923a23d63e353e9761af0f47a6ed0d486979777fe4de59dc9b25f # via # opentelemetry-exporter-otlp-proto-common # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-sdk==1.39.1 \ - --hash=sha256:4d5482c478513ecb0a5d938dcc61394e647066e0cc2676bee9f3af3f3f45f01c \ - --hash=sha256:cf4d4563caf7bff906c9f7967e2be22d0d6b349b908be0d90fb21c8e9c995cc6 +opentelemetry-sdk==1.40.0 \ + --hash=sha256:18e9f5ec20d859d268c7cb3c5198c8d105d073714db3de50b593b8c1345a48f2 \ + --hash=sha256:787d2154a71f4b3d81f20524a8ce061b7db667d24e46753f32a7bc48f1c1f3f1 # via # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-semantic-conventions==0.60b1 \ - --hash=sha256:87c228b5a0669b748c76d76df6c364c369c28f1c465e50f661e39737e84bc953 \ - --hash=sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb +opentelemetry-semantic-conventions==0.61b0 \ + --hash=sha256:072f65473c5d7c6dc0355b27d6c9d1a679d63b6d4b4b16a9773062cb7e31192a \ + --hash=sha256:fa530a96be229795f8cef353739b618148b0fe2b4b3f005e60e262926c4d38e2 # via # opentelemetry-instrumentation # opentelemetry-instrumentation-dbapi @@ -1255,9 +1300,9 @@ opentelemetry-semantic-conventions==0.60b1 \ # opentelemetry-instrumentation-requests # opentelemetry-instrumentation-wsgi # opentelemetry-sdk -opentelemetry-util-http==0.60b1 \ - --hash=sha256:0d97152ca8c8a41ced7172d29d3622a219317f74ae6bb3027cfbdcf22c3cc0d6 \ - --hash=sha256:66381ba28550c91bee14dcba8979ace443444af1ed609226634596b4b0faf199 +opentelemetry-util-http==0.61b0 \ + --hash=sha256:1039cb891334ad2731affdf034d8fb8b48c239af9b6dd295e5fabd07f1c95572 \ + --hash=sha256:8e715e848233e9527ea47e275659ea60a57a75edf5206a3b937e236a6da5fc33 # via # opentelemetry-instrumentation-django # opentelemetry-instrumentation-requests @@ -1266,6 +1311,7 @@ packaging==26.0 \ --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 # via + # bleach # gunicorn # opentelemetry-instrumentation paramiko==4.0.0 \ @@ -1375,17 +1421,17 @@ pillow==12.1.1 \ # python-barcode # qrcode # weasyprint -pint==0.25.2 \ - --hash=sha256:85a45d1da8fe9c9f7477fed8aef59ad2b939af3d6611507e1a9cbdacdcd3450a \ - --hash=sha256:ca35ab1d8eeeb6f7d9942b3cb5f34ca42b61cdd5fb3eae79531553dcca04dda7 +pint==0.25.3 \ + --hash=sha256:27eb25143bd5de9fcc4d5a4b484f16faf6b4615aa93ece6b3373a8c1a3c1b97d \ + --hash=sha256:f8f5df6cf65314d74da1ade1bf96f8e3e4d0c41b51577ac53c49e7d44ca5acee # via -r src/backend/requirements.in pip-licenses==5.5.1 \ --hash=sha256:7df370e6e5024a3f7449abf8e4321ef868ba9a795698ad24ab6851f3e7fc65a7 \ --hash=sha256:ed5e229a93760e529cfa7edaec6630b5a2cd3874c1bddb8019e5f18a723fdead # via -r src/backend/requirements.in -platformdirs==4.9.2 \ - --hash=sha256:9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd \ - --hash=sha256:9a33809944b9db043ad67ca0db94b14bf452cc6aeaac46a88ea55b26e2e9d291 +platformdirs==4.9.4 \ + --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ + --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 # via pint ppf-datamatrix==0.2 \ --hash=sha256:819be65eae444b760e178d5761853f78f8e5fca14fec2809b5e3369978fa9244 \ @@ -1395,17 +1441,17 @@ prettytable==3.17.0 \ --hash=sha256:59f2590776527f3c9e8cf9fe7b66dd215837cca96a9c39567414cbc632e8ddb0 \ --hash=sha256:aad69b294ddbe3e1f95ef8886a060ed1666a0b83018bbf56295f6f226c43d287 # via pip-licenses -protobuf==6.33.5 \ - --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ - --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ - --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ - --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ - --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ - --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ - --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ - --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ - --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ - --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b +protobuf==6.33.6 \ + --hash=sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326 \ + --hash=sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901 \ + --hash=sha256:7d29d9b65f8afef196f8334e80d6bc1d5d4adedb449971fefd3723824e6e77d3 \ + --hash=sha256:9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a \ + --hash=sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135 \ + --hash=sha256:bd56799fb262994b2c2faa1799693c95cc2e22c62f56fb43af311cae45d26f0e \ + --hash=sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3 \ + --hash=sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2 \ + --hash=sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593 \ + --hash=sha256:f443a394af5ed23672bc6c486be138628fbe5c651ccbc536873d7da23d1868cf # via # googleapis-common-protos # opentelemetry-proto @@ -1444,9 +1490,9 @@ pydyf==0.12.1 \ --hash=sha256:ea25b4e1fe7911195cb57067560daaa266639184e8335365cc3ee5214e7eaadc \ --hash=sha256:fbd7e759541ac725c29c506612003de393249b94310ea78ae44cb1d04b220095 # via weasyprint -pyjwt[crypto]==2.11.0 \ - --hash=sha256:35f95c1f0fbe5d5ba6e43f00271c275f7a1a4db1dab27bf708073b75318ea623 \ - --hash=sha256:94a6bde30eb5c8e04fee991062b534071fd1439ef58d2adc9ccb823e7bcd0469 +pyjwt[crypto]==2.12.1 \ + --hash=sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c \ + --hash=sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b # via # django-allauth # djangorestframework-simplejwt @@ -1477,9 +1523,9 @@ pynacl==1.6.2 \ --hash=sha256:d29bfe37e20e015a7d8b23cfc8bd6aa7909c92a1b8f41ee416bbb3e79ef182b2 \ --hash=sha256:fe9847ca47d287af41e82be1dd5e23023d3c31a951da134121ab02e42ac218c9 # via paramiko -pypdf==6.7.5 \ - --hash=sha256:07ba7f1d6e6d9aa2a17f5452e320a84718d4ce863367f7ede2fd72280349ab13 \ - --hash=sha256:40bb2e2e872078655f12b9b89e2f900888bb505e88a82150b64f9f34fa25651d +pypdf==6.9.2 \ + --hash=sha256:662cf29bcb419a36a1365232449624ab40b7c2d0cfc28e54f42eeecd1fd7e844 \ + --hash=sha256:7f850faf2b0d4ab936582c05da32c52214c2b089d61a316627b5bfb5b0dab46c # via -r src/backend/requirements.in pyphen==0.17.2 \ --hash=sha256:3a07fb017cb2341e1d9ff31b8634efb1ae4dc4b130468c7c39dd3d32e7c3affd \ @@ -1496,9 +1542,9 @@ python-dateutil==2.9.0.post0 \ # botocore # django-recurrence # icalendar -python-dotenv==1.2.1 \ - --hash=sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6 \ - --hash=sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61 +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 # via -r src/backend/requirements.in python-fsutil==0.16.0 \ --hash=sha256:a60e16bad77e3f00c3dca95433209c823bc45e0ae4158e52969002f3c7957a18 \ @@ -1686,9 +1732,9 @@ rapidfuzz==3.14.3 \ --hash=sha256:fa7c8f26f009f8c673fbfb443792f0cf8cf50c4e18121ff1e285b5e08a94fbdb \ --hash=sha256:fce3152f94afcfd12f3dd8cf51e48fa606e3cb56719bccebe3b401f43d0714f9 # via -r src/backend/requirements.in -redis==7.2.1 \ - --hash=sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33 \ - --hash=sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5 +redis==7.4.0 \ + --hash=sha256:64a6ea7bf567ad43c964d2c30d82853f8df927c5c9017766c55a1d1ed95d18ad \ + --hash=sha256:a9c74a5c893a5ef8455a5adb793a31bb70feb821c86eccb62eebef5a19c429ec # via django-redis referencing==0.37.0 \ --hash=sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 \ @@ -1696,9 +1742,9 @@ referencing==0.37.0 \ # via # jsonschema # jsonschema-specifications -requests==2.32.5 \ - --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ - --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf +requests==2.33.0 \ + --hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \ + --hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652 # via # django-allauth # django-anymail @@ -1827,15 +1873,15 @@ s3transfer==0.16.0 \ --hash=sha256:18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe \ --hash=sha256:8e990f13268025792229cd52fa10cb7163744bf56e719e0b9cb925ab79abf920 # via boto3 -sentry-sdk==2.53.0 \ - --hash=sha256:46e1ed8d84355ae54406c924f6b290c3d61f4048625989a723fd622aab838899 \ - --hash=sha256:6520ef2c4acd823f28efc55e43eb6ce2e6d9f954a95a3aa96b6fd14871e92b77 +sentry-sdk==2.56.0 \ + --hash=sha256:5afafb744ceb91d22f4cc650c6bd048ac6af5f7412dcc6c59305a2e36f4dbc02 \ + --hash=sha256:fdab72030b69625665b2eeb9738bdde748ad254e8073085a0ce95382678e8168 # via # -r src/backend/requirements.in # django-q-sentry -setuptools==82.0.0 \ - --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ - --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 +setuptools==82.0.1 \ + --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \ + --hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb # via -r src/backend/requirements.in sgmllib3k==1.0.0 \ --hash=sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9 @@ -1843,7 +1889,9 @@ sgmllib3k==1.0.0 \ six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 - # via python-dateutil + # via + # bleach + # python-dateutil sqlparse==0.5.5 \ --hash=sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba \ --hash=sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e @@ -1858,16 +1906,15 @@ tablib[xls, xlsx, yaml]==3.9.0 \ --hash=sha256:1b6abd8edb0f35601e04c6161d79660fdcde4abb4a54f66cc9f9054bd55d5fe2 \ --hash=sha256:eda17cd0d4dda614efc0e710227654c60ddbeb1ca92cdcfc5c3bd1fc5f5a6e4a # via -r src/backend/requirements.in -tinycss2==1.4.0 \ - --hash=sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7 \ - --hash=sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289 +tinycss2==1.5.1 \ + --hash=sha256:3415ba0f5839c062696996998176c4a3751d18b7edaaeeb658c9ce21ec150661 \ + --hash=sha256:d339d2b616ba90ccce58da8495a78f46e55d4d25f9fd71dfd526f07e7d53f957 # via - # bleach # cssselect2 # weasyprint -tinyhtml5==2.0.0 \ - --hash=sha256:086f998833da24c300c414d9fe81d9b368fd04cb9d2596a008421cbc705fcfcc \ - --hash=sha256:13683277c5b176d070f82d099d977194b7a1e26815b016114f581a74bbfbf47e +tinyhtml5==2.1.0 \ + --hash=sha256:60a50ec3d938a37e491efa01af895853060943dcebb5627de5b10d188b338a67 \ + --hash=sha256:6e11cfff38515834268daf89d5f85bbde0b6dd02e8d9e212d1385c2289b89f0a # via weasyprint typing-extensions==4.15.0 \ --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ @@ -1910,9 +1957,9 @@ wcwidth==0.6.0 \ # via # blessed # prettytable -weasyprint==66.0 \ - --hash=sha256:82b0783b726fcd318e2c977dcdddca76515b30044bc7a830cc4fbe717582a6d0 \ - --hash=sha256:da71dc87dc129ac9cffdc65e5477e90365ab9dbae45c744014ec1d06303dde40 +weasyprint==68.1 \ + --hash=sha256:4dc3ba63c68bbbce3e9617cb2226251c372f5ee90a8a484503b1c099da9cf5be \ + --hash=sha256:d3b752049b453a5c95edb27ce78d69e9319af5a34f257fa0f4c738c701b4184e # via -r src/backend/requirements.in webencodings==0.5.1 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ diff --git a/src/frontend/CHANGELOG.md b/src/frontend/CHANGELOG.md index 97db95266d..7fd7be38d5 100644 --- a/src/frontend/CHANGELOG.md +++ b/src/frontend/CHANGELOG.md @@ -2,6 +2,24 @@ This file contains historical changelog information for the InvenTree UI components library. +### 0.10.1 - April 2026 + +Allows plugins to specify custom model rendering functions within the data import wizard, allowing import of data models not defined in the core InvenTree codebase. + +### 0.10.0 - April 2026 + +Exposes the `importer` object to the plugin context, allow plugins to initialize a data import session using the data importer wizard. + +### 0.9.0 - March 2026 + +Exposes the `useMonitorBackgroundTask` hook, which allows plugins to monitor the status of a background task and display notifications when the task is complete. This is useful for plugins that offload long-running tasks to the background and want to provide feedback to the user when the task is complete. + +Renames the `monitorDataOutput` hook to `useMonitorDataOutput` to better reflect the fact that this is a React hook, and to provide a more consistent naming convention for hooks in the library. + +### 0.8.2 - March 2026 + +Bug fixes for the `monitorDataOutput` hook - https://github.com/inventree/InvenTree/pull/11458 + ### 0.8.0 - March 2026 Exposes the `monitorDataOutput` hook, which allows plugins to monitor the output of a long-running task and display notifications when the task is complete. This is useful for plugins that need to perform long-running tasks and want to provide feedback to the user when the task is complete. diff --git a/src/frontend/lib/enums/ApiEndpoints.tsx b/src/frontend/lib/enums/ApiEndpoints.tsx index e7adf3f0b8..8a1a80ad73 100644 --- a/src/frontend/lib/enums/ApiEndpoints.tsx +++ b/src/frontend/lib/enums/ApiEndpoints.tsx @@ -64,7 +64,7 @@ export enum ApiEndpoints { content_type_list = 'contenttype/', icons = 'icons/', selectionlist_list = 'selection/', - selectionlist_detail = 'selection/:id/', + selectionentry_list = 'selection/:id/entry/', // Barcode API endpoints barcode = 'barcode/', diff --git a/src/frontend/lib/enums/ModelInformation.tsx b/src/frontend/lib/enums/ModelInformation.tsx index 6f93a1ebeb..6db5b5672a 100644 --- a/src/frontend/lib/enums/ModelInformation.tsx +++ b/src/frontend/lib/enums/ModelInformation.tsx @@ -287,6 +287,13 @@ export const ModelInformationDict: ModelDict = { api_endpoint: ApiEndpoints.selectionlist_list, icon: 'list_details' }, + selectionentry: { + label: () => t`Selection Entry`, + label_multiple: () => t`Selection Entries`, + url_overview: '/settings/admin/part-parameters', + api_endpoint: ApiEndpoints.selectionentry_list, + icon: 'list_details' + }, error: { label: () => t`Error`, label_multiple: () => t`Errors`, diff --git a/src/frontend/lib/enums/ModelType.tsx b/src/frontend/lib/enums/ModelType.tsx index 57aa1b7205..ea85b542fc 100644 --- a/src/frontend/lib/enums/ModelType.tsx +++ b/src/frontend/lib/enums/ModelType.tsx @@ -35,5 +35,6 @@ export enum ModelType { pluginconfig = 'pluginconfig', contenttype = 'contenttype', selectionlist = 'selectionlist', + selectionentry = 'selectionentry', error = 'error' } diff --git a/src/frontend/lib/hooks/MonitorBackgroundTask.tsx b/src/frontend/lib/hooks/MonitorBackgroundTask.tsx new file mode 100644 index 0000000000..db130b6be4 --- /dev/null +++ b/src/frontend/lib/hooks/MonitorBackgroundTask.tsx @@ -0,0 +1,118 @@ +import { useDocumentVisibility } from '@mantine/hooks'; +import { notifications, showNotification } from '@mantine/notifications'; +import { + IconCircleCheck, + IconCircleX, + IconExclamationCircle +} from '@tabler/icons-react'; +import { type QueryClient, useQuery } from '@tanstack/react-query'; +import type { AxiosInstance } from 'axios'; +import { useEffect, useState } from 'react'; +import { ApiEndpoints } from '../enums/ApiEndpoints'; +import { apiUrl } from '../functions/Api'; + +export type MonitorBackgroundTaskProps = { + api: AxiosInstance; + queryClient?: QueryClient; + title?: string; + message: string; + errorMessage?: string; + successMessage?: string; + failureMessage?: string; + taskId?: string; + onSuccess?: () => void; + onFailure?: () => void; + onComplete?: () => void; + onError?: (error: Error) => void; +}; + +/** + * Hook for monitoring a background task running on the server + */ +export default function useMonitorBackgroundTask( + props: MonitorBackgroundTaskProps +) { + const visibility = useDocumentVisibility(); + + const [tracking, setTracking] = useState(false); + + useEffect(() => { + if (!!props.taskId) { + setTracking(true); + showNotification({ + id: `background-task-${props.taskId}`, + title: props.title, + message: props.message, + loading: true, + autoClose: false, + withCloseButton: false + }); + } else { + setTracking(false); + } + }, [props.taskId]); + + useQuery( + { + enabled: !!props.taskId && tracking && visibility === 'visible', + refetchInterval: 500, + queryKey: ['background-task', props.taskId], + queryFn: () => + props.api + .get(apiUrl(ApiEndpoints.task_overview, props.taskId)) + .then((response) => { + const data = response?.data ?? {}; + + if (data.complete) { + setTracking(false); + props.onComplete?.(); + + notifications.update({ + id: `background-task-${props.taskId}`, + title: props.title, + loading: false, + color: data.success ? 'green' : 'red', + message: response.data?.success + ? (props.successMessage ?? props.message) + : (props.failureMessage ?? props.message), + icon: response.data?.success ? ( + + ) : ( + + ), + autoClose: 1000, + withCloseButton: true + }); + + if (data.success) { + props.onSuccess?.(); + } else { + props.onFailure?.(); + } + } + + return response; + }) + .catch((error) => { + console.error( + `Error fetching background task status for task ${props.taskId}:`, + error + ); + setTracking(false); + props.onError?.(error); + + notifications.update({ + id: `background-task-${props.taskId}`, + title: props.title, + loading: false, + color: 'red', + message: props.errorMessage ?? props.message, + icon: , + autoClose: 5000, + withCloseButton: true + }); + }) + }, + props.queryClient + ); +} diff --git a/src/frontend/lib/hooks/MonitorDataOutput.tsx b/src/frontend/lib/hooks/MonitorDataOutput.tsx index a03654cd69..dd66758416 100644 --- a/src/frontend/lib/hooks/MonitorDataOutput.tsx +++ b/src/frontend/lib/hooks/MonitorDataOutput.tsx @@ -2,121 +2,123 @@ import { t } from '@lingui/core/macro'; import { useDocumentVisibility } from '@mantine/hooks'; import { notifications, showNotification } from '@mantine/notifications'; import { IconCircleCheck, IconExclamationCircle } from '@tabler/icons-react'; -import { useQuery } from '@tanstack/react-query'; +import { type QueryClient, useQuery } from '@tanstack/react-query'; import type { AxiosInstance } from 'axios'; import { useEffect, useState } from 'react'; import { ProgressBar } from '../components/ProgressBar'; import { ApiEndpoints } from '../enums/ApiEndpoints'; import { apiUrl } from '../functions/Api'; -/** - * Hook for monitoring a data output process running on the server - */ -export default function monitorDataOutput({ - api, - title, - hostname, - id -}: { +export type MonitorDataOutputProps = { api: AxiosInstance; + queryClient?: QueryClient; title: string; hostname?: string; id?: number; -}) { +}; + +/** + * Hook for monitoring a data output process running on the server + */ +export default function useMonitorDataOutput(props: MonitorDataOutputProps) { const visibility = useDocumentVisibility(); const [loading, setLoading] = useState(false); useEffect(() => { - if (!!id) { + if (!!props.id) { setLoading(true); showNotification({ - id: `data-output-${id}`, - title: title, + id: `data-output-${props.id}`, + title: props.title, loading: true, autoClose: false, withCloseButton: false, message: }); } else setLoading(false); - }, [id, title]); + }, [props.id, props.title]); - useQuery({ - enabled: !!id && loading && visibility === 'visible', - refetchInterval: 500, - queryKey: ['data-output', id, title], - queryFn: () => - api - .get(apiUrl(ApiEndpoints.data_output, id)) - .then((response) => { - const data = response?.data ?? {}; + useQuery( + { + enabled: !!props.id && loading && visibility === 'visible', + refetchInterval: 500, + queryKey: ['data-output', props.id, props.title], + queryFn: () => + props.api + .get(apiUrl(ApiEndpoints.data_output, props.id)) + .then((response) => { + const data = response?.data ?? {}; - if (!!data.errors || !!data.error) { + if (!!data.errors || !!data.error) { + setLoading(false); + + const error: string = + data?.error ?? data?.errors?.error ?? t`Process failed`; + + notifications.update({ + id: `data-output-${props.id}`, + loading: false, + icon: , + autoClose: 2500, + title: props.title, + message: error, + color: 'red' + }); + } else if (data.complete) { + setLoading(false); + notifications.update({ + id: `data-output-${props.id}`, + loading: false, + autoClose: 2500, + title: props.title, + message: t`Process completed successfully`, + color: 'green', + icon: + }); + + if (data.output) { + const url = data.output; + const base = props.hostname ?? window.location.origin; + + const downloadUrl = new URL(url, base); + + window.open(downloadUrl.toString(), '_blank'); + } + } else { + notifications.update({ + id: `data-output-${props.id}`, + loading: true, + autoClose: false, + withCloseButton: false, + message: ( + 0} + animated + /> + ) + }); + } + + return data; + }) + .catch((error: Error) => { + console.error('Error in useMonitorDataOutput:', error); setLoading(false); - - const error: string = - data?.error ?? data?.errors?.error ?? t`Process failed`; - notifications.update({ - id: `data-output-${id}`, + id: `data-output-${props.id}`, loading: false, - icon: , autoClose: 2500, - title: title, - message: error, + title: props.title, + message: error.message || t`Process failed`, color: 'red' }); - } else if (data.complete) { - setLoading(false); - notifications.update({ - id: `data-output-${id}`, - loading: false, - autoClose: 2500, - title: title, - message: t`Process completed successfully`, - color: 'green', - icon: - }); - - if (data.output) { - const url = data.output; - const base = hostname ?? window.location.hostname; - - const downloadUrl = new URL(url, base); - - window.open(downloadUrl.toString(), '_blank'); - } - } else { - notifications.update({ - id: `data-output-${id}`, - loading: true, - autoClose: false, - withCloseButton: false, - message: ( - 0} - animated - /> - ) - }); - } - - return data; - }) - .catch(() => { - setLoading(false); - notifications.update({ - id: `data-output-${id}`, - loading: false, - autoClose: 2500, - title: title, - message: t`Process failed`, - color: 'red' - }); - return {}; - }) - }); + return {}; + }) + }, + props.queryClient + ); } diff --git a/src/frontend/lib/index.ts b/src/frontend/lib/index.ts index 625e65c436..f9812e6df7 100644 --- a/src/frontend/lib/index.ts +++ b/src/frontend/lib/index.ts @@ -73,4 +73,11 @@ export { } from './components/RowActions'; // Shared hooks -export { default as monitorDataOutput } from './hooks/MonitorDataOutput'; +export { + default as useMonitorDataOutput, + type MonitorDataOutputProps +} from './hooks/MonitorDataOutput'; +export { + default as useMonitorBackgroundTask, + type MonitorBackgroundTaskProps +} from './hooks/MonitorBackgroundTask'; diff --git a/src/frontend/lib/types/Forms.tsx b/src/frontend/lib/types/Forms.tsx index 1bc3dc62f3..2b229dcb45 100644 --- a/src/frontend/lib/types/Forms.tsx +++ b/src/frontend/lib/types/Forms.tsx @@ -68,6 +68,7 @@ export type ApiFormFieldHeader = { * @param adjustValue : Callback function to adjust the value of the field before it is sent to the API * @param addRow : Callback function to add a new row to a table field * @param onKeyDown : Callback function to get which key was pressed in the form to handle submission on enter + * @param singleFetchFunction : Optional function to fetch a single value for this field (used for fetching the initial value when editing an existing object) */ export type ApiFormFieldType = { label?: string; @@ -126,6 +127,7 @@ export type ApiFormFieldType = { addRow?: () => any; headers?: ApiFormFieldHeader[]; depends_on?: string[]; + singleFetchFunction?: (value: any) => Promise | null; }; export type ApiFormFieldSet = Record; @@ -180,6 +182,8 @@ export interface ApiFormProps { follow?: boolean; actions?: ApiFormAction[]; timeout?: number; + keepOpenOption?: boolean; + onKeepOpenChange?: (keepOpen: boolean) => void; } /** diff --git a/src/frontend/lib/types/Icons.tsx b/src/frontend/lib/types/Icons.tsx index c06cb197c5..ea03bfba0c 100644 --- a/src/frontend/lib/types/Icons.tsx +++ b/src/frontend/lib/types/Icons.tsx @@ -1,8 +1,6 @@ -import type { Icon, IconProps } from '@tabler/icons-react'; +import type { IconCircle } from '@tabler/icons-react'; -export type TablerIconType = React.ForwardRefExoticComponent< - Omit & React.RefAttributes ->; +export type TablerIconType = typeof IconCircle; export type InvenTreeIconType = { [key: string]: TablerIconType; diff --git a/src/frontend/lib/types/Plugins.tsx b/src/frontend/lib/types/Plugins.tsx index cc10083b6e..840d695d6d 100644 --- a/src/frontend/lib/types/Plugins.tsx +++ b/src/frontend/lib/types/Plugins.tsx @@ -48,6 +48,13 @@ export type InvenTreeFormsContext = { stockActions: StockAdjustmentFormsContext; }; +export type ImporterDrawerContext = { + open: (sessionId: number, options?: { onClose?: () => void }) => void; + close: () => void; + isOpen: () => boolean; + sessionId: () => number | null; +}; + /** * A set of properties which are passed to a plugin, * for rendering an element in the user interface. @@ -59,6 +66,8 @@ export type InvenTreeFormsContext = { * @param globalSettings - The global settings (see ../states/SettingsState.tsx) * @param navigate - The navigation function (see react-router-dom) * @param theme - The current Mantine theme + * @param forms - A set of functions for opening various API forms (see ../components/Forms.tsx) + * @param importer - A set of functions for controlling the global importer drawer (see ../components/importer/GlobalImporterDrawer.tsx) * @param colorScheme - The current Mantine color scheme (e.g. 'light' / 'dark') * @param host - The current host URL * @param i18n - The i18n instance for translations (from @lingui/core) @@ -87,6 +96,7 @@ export type InvenTreePluginContext = { navigate: NavigateFunction; theme: MantineTheme; forms: InvenTreeFormsContext; + importer: ImporterDrawerContext; colorScheme: MantineColorScheme; model?: ModelType | string; id?: string | number | null; diff --git a/src/frontend/package.json b/src/frontend/package.json index 4c283164f9..9e588afb9c 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -1,7 +1,7 @@ { "name": "@inventreedb/ui", "description": "UI components for the InvenTree project", - "version": "0.8.0", + "version": "0.10.1", "private": false, "type": "module", "license": "MIT", @@ -40,14 +40,14 @@ "compile": "lingui compile --typescript" }, "dependencies": { - "@codemirror/autocomplete": "6.18.7", - "@codemirror/lang-liquid": "6.3.0", - "@codemirror/language": "6.11.3", - "@codemirror/lint": "6.8.5", - "@codemirror/search": "6.5.11", - "@codemirror/state": "6.5.2", - "@codemirror/theme-one-dark": "6.1.3", - "@codemirror/view": "6.38.2", + "@codemirror/autocomplete": "^6.20.1", + "@codemirror/lang-liquid": "^6.3.2", + "@codemirror/language": "^6.12.2", + "@codemirror/lint": "^6.9.5", + "@codemirror/search": "^6.6.0", + "@codemirror/state": "^6.6.0", + "@codemirror/theme-one-dark": "^6.1.3", + "@codemirror/view": "^6.40.0", "@emotion/react": "^11.13.3", "@fortawesome/fontawesome-svg-core": "^7.0.0", "@fortawesome/free-regular-svg-icons": "^7.0.0", @@ -58,8 +58,8 @@ "@fullcalendar/interaction": "^6.1.15", "@fullcalendar/react": "^6.1.15", "@github/webauthn-json": "^2.1.1", - "@lingui/core": "^5.3.1", - "@lingui/react": "^5.3.1", + "@lingui/core": "^5.9.2", + "@lingui/react": "^5.9.2", "@mantine/carousel": "^8.2.7", "@mantine/charts": "^8.2.7", "@mantine/core": "^8.2.7", @@ -72,16 +72,16 @@ "@mantine/spotlight": "^8.2.7", "@mantine/vanilla-extract": "^8.2.7", "@messageformat/date-skeleton": "^1.1.0", - "@sentry/react": "^10.7.0", + "@sentry/react": "^10.43.0", "@tabler/icons-react": "^3.17.0", "@tanstack/react-query": "^5.56.2", - "@uiw/codemirror-theme-vscode": "4.25.1", - "@uiw/react-codemirror": "4.25.1", - "@uiw/react-split": "^5.9.3", - "@vanilla-extract/css": "^1.17.1", - "axios": "^1.8.4", + "@uiw/codemirror-theme-vscode": "^4.25.8", + "@uiw/react-codemirror": "^4.25.8", + "@uiw/react-split": "^5.9.4", + "@vanilla-extract/css": "^1.18.0", + "axios": "^1.13.6", "clsx": "^2.1.1", - "codemirror": "6.0.2", + "codemirror": "^6.0.2", "dayjs": "^1.11.13", "dompurify": "^3.2.4", "easymde": "^2.18.0", @@ -91,11 +91,11 @@ "mantine-contextmenu": "^8.2.0", "mantine-datatable": "^8.2.0", "qrcode": "^1.5.4", - "react": "^19.1.2", - "react-dom": "^19.1.2", + "react": "^19.2.4", + "react-dom": "^19.2.4", "react-grid-layout": "1.4.4", "react-hook-form": "^7.62.0", - "react-is": "^19.1.2", + "react-is": "^19.2.4", "react-router-dom": "^6.26.2", "react-select": "^5.9.0", "react-simplemde-editor": "^5.2.0", @@ -105,35 +105,38 @@ "zustand": "^5.0.8" }, "devDependencies": { - "@babel/core": "^7.26.10", - "@babel/preset-react": "^7.26.3", - "@babel/preset-typescript": "^7.27.0", - "@babel/runtime": "^7.27.0", - "@codecov/vite-plugin": "^1.9.0", - "@lingui/babel-plugin-lingui-macro": "^5.3.1", - "@lingui/cli": "^5.3.1", - "@lingui/macro": "^5.3.1", - "@playwright/test": "1.56.0", - "@types/node": "^24.3.0", + "@babel/core": "^7.29.0", + "@babel/preset-react": "^7.28.5", + "@babel/preset-typescript": "^7.28.5", + "@babel/runtime": "^7.28.6", + "@codecov/vite-plugin": "^1.9.1", + "@lingui/babel-plugin-lingui-macro": "^5.9.2", + "@lingui/cli": "^5.9.2", + "@lingui/macro": "^5.9.2", + "@playwright/test": "^1.58.2", + "@types/node": "^25.5.0", "@types/qrcode": "^1.5.5", - "@types/react": "^19.1.10", - "@types/react-dom": "^19.1.7", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", "@types/react-grid-layout": "^1.3.5", "@types/react-router-dom": "^5.3.3", "@types/react-window": "^1.8.8", - "@vanilla-extract/vite-plugin": "^5.1.1", - "@vitejs/plugin-react": "^5.0.2", + "@vanilla-extract/vite-plugin": "^5.1.4", + "@vitejs/plugin-react": "^5.2.0", "babel-plugin-macros": "^3.1.0", - "nyc": "^17.1.0", + "nyc": "^18.0.0", "otpauth": "^9.4.1", "path": "^0.12.7", - "rollup": "^4.0.0", - "rollup-plugin-license": "^3.5.3", - "typescript": "^5.8.2", - "vite": "7.1.11", + "rollup": "^4.59.0", + "rollup-plugin-license": "^3.7.0", + "typescript": "^5.9.3", + "vite": "7.3.2", "vite-plugin-babel-macros": "^1.0.6", - "vite-plugin-dts": "^4.5.3", + "vite-plugin-dts": "^4.5.4", "vite-plugin-externals": "^0.6.2", - "vite-plugin-istanbul": "^6.0.2" + "vite-plugin-istanbul": "^8.0.0" + }, + "resolutions": { + "undici": "^6.24.0" } } diff --git a/src/frontend/playwright.config.ts b/src/frontend/playwright.config.ts index 93e298eb7e..6cc8bf43f4 100644 --- a/src/frontend/playwright.config.ts +++ b/src/frontend/playwright.config.ts @@ -96,6 +96,15 @@ export default defineConfig({ stdout: 'pipe', stderr: 'pipe', timeout: 120 * 1000 + }, + { + command: 'invoke worker', + env: { + INVENTREE_DEBUG: 'True', + INVENTREE_LOG_LEVEL: 'INFO', + INVENTREE_PLUGINS_ENABLED: 'True', + INVENTREE_PLUGINS_MANDATORY: 'samplelocate' + } } ], globalSetup: './playwright/global-setup.ts', diff --git a/src/frontend/playwright/global-setup.ts b/src/frontend/playwright/global-setup.ts index 6386959cbf..4930c98b23 100644 --- a/src/frontend/playwright/global-setup.ts +++ b/src/frontend/playwright/global-setup.ts @@ -2,7 +2,13 @@ import { type FullConfig, chromium, request } from '@playwright/test'; import fs from 'node:fs'; import path from 'node:path'; -import { apiUrl } from '../tests/defaults'; +import { + adminuser, + allaccessuser, + apiUrl, + readeruser, + stevenuser +} from '../tests/defaults'; import { doCachedLogin } from '../tests/login'; async function globalSetup(config: FullConfig) { @@ -45,26 +51,22 @@ async function globalSetup(config: FullConfig) { // Perform login for each user (each in a separate browser instance) await doCachedLogin(await chromium.launch(), { - username: 'admin', - password: 'inventree', + user: adminuser, baseUrl: baseUrl }); await doCachedLogin(await chromium.launch(), { - username: 'allaccess', - password: 'nolimits', + user: allaccessuser, baseUrl: baseUrl }); await doCachedLogin(await chromium.launch(), { - username: 'reader', - password: 'readonly', + user: readeruser, baseUrl: baseUrl }); await doCachedLogin(await chromium.launch(), { - username: 'steven', - password: 'wizardstaff', + user: stevenuser, baseUrl: baseUrl }); } diff --git a/src/frontend/src/components/buttons/StarredToggleButton.tsx b/src/frontend/src/components/buttons/StarredToggleButton.tsx index bd699f1786..89015329b2 100644 --- a/src/frontend/src/components/buttons/StarredToggleButton.tsx +++ b/src/frontend/src/components/buttons/StarredToggleButton.tsx @@ -35,7 +35,7 @@ export default function StarredToggleButton({ showNotification({ title: t`Subscription Updated`, id: 'subscription-update', - message: `Subscription ${starred ? 'removed' : 'added'}`, + message: starred ? t`Subscription removed` : t`Subscription added`, autoClose: 5000, color: 'blue' }); @@ -43,7 +43,7 @@ export default function StarredToggleButton({ }) .catch((error) => { showNotification({ - title: 'Error', + title: t`Error`, message: error.message, autoClose: 5000, color: 'red' diff --git a/src/frontend/src/components/details/Details.tsx b/src/frontend/src/components/details/Details.tsx index 2e61e7377a..9222814fa4 100644 --- a/src/frontend/src/components/details/Details.tsx +++ b/src/frontend/src/components/details/Details.tsx @@ -127,7 +127,7 @@ function HoverNameBadge(data: any, type: BadgeType) { data?.image, <> {data.is_superuser && {t`Superuser`}} - {data.is_staff && {t`Staff`}} + {data.is_staff && {t`Administrator`}} {data.email && t`Email: ` + data.email} ]; diff --git a/src/frontend/src/components/details/DetailsImage.tsx b/src/frontend/src/components/details/DetailsImage.tsx index 3efdc9386b..2df961ff35 100644 --- a/src/frontend/src/components/details/DetailsImage.tsx +++ b/src/frontend/src/components/details/DetailsImage.tsx @@ -19,7 +19,7 @@ import { } from '@mantine/dropzone'; import { useHover } from '@mantine/hooks'; import { modals } from '@mantine/modals'; -import { useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { ActionButton } from '@lib/components/ActionButton'; import type { UserRoles } from '@lib/enums/Roles'; @@ -82,8 +82,14 @@ const removeModal = (apiPath: string, setImage: (image: string) => void) => ), labels: { confirm: t`Remove`, cancel: t`Cancel` }, onConfirm: async () => { - await api.patch(apiPath, { image: null }); - setImage(backup_image); + api.patch(apiPath, { image: null }).then(() => { + setImage(backup_image); + showNotification({ + title: t`Image removed`, + message: t`The image has been removed successfully`, + color: 'green' + }); + }); } }); @@ -100,13 +106,57 @@ function UploadModal({ const [currentFile, setCurrentFile] = useState(null); let uploading = false; + useEffect(() => { + const handlePaste = (event: ClipboardEvent) => { + const clipboardItems = event.clipboardData?.items; + + if (!clipboardItems) { + return; + } + + const imageItem = Array.from(clipboardItems).find((item) => + item.type.startsWith('image/') + ); + + if (!imageItem) { + return; + } + + const imageFile = imageItem.getAsFile(); + + if (!imageFile) { + return; + } + + const fileExtension = imageFile.type.split('/')[1] || 'png'; + const pastedFile = new File( + [imageFile], + `clipboard-image.${fileExtension}`, + { + type: imageFile.type + } + ) as FileWithPath; + + setCurrentFile(pastedFile); + event.preventDefault(); + }; + + document.addEventListener('paste', handlePaste); + + return () => { + document.removeEventListener('paste', handlePaste); + }; + }, []); + // Components to show in the Dropzone when no file is selected const noFileIdle = (
- Drag and drop to upload + + Drag and drop to upload, or paste an image from the clipboard + Click to select file(s) diff --git a/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx b/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx index 796c191268..c0799f0403 100644 --- a/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx +++ b/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx @@ -112,9 +112,9 @@ export const PdfPreviewComponent: PreviewAreaComponent = forwardRef( style={{ display: 'flex', justifyContent: 'center', - alignItems: 'center', height: '100%', - width: '100%' + width: '100%', + paddingTop: '50px' }} > Preview not available, click "Reload Preview". diff --git a/src/frontend/src/components/forms/ApiForm.tsx b/src/frontend/src/components/forms/ApiForm.tsx index 089ce4f36b..43b2b22948 100644 --- a/src/frontend/src/components/forms/ApiForm.tsx +++ b/src/frontend/src/components/forms/ApiForm.tsx @@ -12,7 +12,7 @@ import { import { useId } from '@mantine/hooks'; import { notifications } from '@mantine/notifications'; import { useQuery, useQueryClient } from '@tanstack/react-query'; -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { type FieldValues, FormProvider, @@ -42,6 +42,7 @@ import { showTimeoutNotification } from '../../functions/notifications'; import { Boundary } from '../Boundary'; +import { KeepFormOpenSwitch } from './KeepFormOpenSwitch'; import { ApiFormField } from './fields/ApiFormField'; export function OptionsApiForm({ @@ -169,6 +170,12 @@ export function ApiForm({ }>) { const api = useApi(); const queryClient = useQueryClient(); + const keepOpenRef = useRef(false); + + const onKeepOpenChange = (v: boolean) => { + keepOpenRef.current = v; + props.onKeepOpenChange?.(v); + }; // Accessor for the navigation function (which is used to redirect the user) let navigate: NavigateFunction | null = null; @@ -459,9 +466,14 @@ export function ApiForm({ props.onFormSuccess(response.data, form); } - if (props.follow && props.modelType && response.data?.pk) { + if ( + props.follow && + props.modelType && + response.data?.pk && + !keepOpenRef.current + ) { // If we want to automatically follow the returned data - if (!!navigate) { + if (!!navigate && !keepOpenRef.current) { navigate(getDetailUrl(props.modelType, response.data?.pk)); } } else if (props.table) { @@ -588,7 +600,6 @@ export function ApiForm({ ); } - return ( @@ -673,7 +684,12 @@ export function ApiForm({ {/* Footer with Action Buttons */} -
+ + + {props.keepOpenOption && ( + + )} + {props.actions?.map((action, i) => (
+
); diff --git a/src/frontend/src/components/forms/InstanceOptions.tsx b/src/frontend/src/components/forms/InstanceOptions.tsx index d59873c962..bc8107312d 100644 --- a/src/frontend/src/components/forms/InstanceOptions.tsx +++ b/src/frontend/src/components/forms/InstanceOptions.tsx @@ -23,6 +23,7 @@ import { import { ActionButton } from '@lib/components/ActionButton'; import type { HostList } from '@lib/types/Server'; import { useShallow } from 'zustand/react/shallow'; +import { translateHostName } from '../../defaults/defaultHostList'; import { Wrapper } from '../../pages/Auth/Layout'; import { useLocalState } from '../../states/LocalState'; import { useServerApiState } from '../../states/ServerApiState'; @@ -43,7 +44,7 @@ export function InstanceOptions({ ); const hostListData = Object.keys(hostList).map((key) => ({ value: key, - label: hostList[key]?.name + label: translateHostName(hostList[key]?.name) })); function SaveOptions(newHostList: HostList): void { diff --git a/src/frontend/src/components/forms/KeepFormOpenSwitch.tsx b/src/frontend/src/components/forms/KeepFormOpenSwitch.tsx new file mode 100644 index 0000000000..1c4d75b2c9 --- /dev/null +++ b/src/frontend/src/components/forms/KeepFormOpenSwitch.tsx @@ -0,0 +1,23 @@ +import { Switch } from '@mantine/core'; +import { useEffect, useState } from 'react'; + +export function KeepFormOpenSwitch({ + onChange +}: { onChange?: (v: boolean) => void }) { + const [keepOpen, setKeepOpen] = useState(false); + + useEffect(() => { + onChange?.(keepOpen); + }, [keepOpen]); + + return ( + setKeepOpen(e.currentTarget.checked)} + /> + ); +} diff --git a/src/frontend/src/components/forms/fields/ApiFormField.tsx b/src/frontend/src/components/forms/fields/ApiFormField.tsx index 88bbf034cc..793ab1f217 100644 --- a/src/frontend/src/components/forms/fields/ApiFormField.tsx +++ b/src/frontend/src/components/forms/fields/ApiFormField.tsx @@ -85,6 +85,7 @@ export function ApiFormField({ onValueChange: undefined, adjustFilters: undefined, adjustValue: undefined, + allow_null: undefined, read_only: undefined, children: undefined, exclude: undefined diff --git a/src/frontend/src/components/forms/fields/RelatedModelField.tsx b/src/frontend/src/components/forms/fields/RelatedModelField.tsx index 85398bac35..df711af1c1 100644 --- a/src/frontend/src/components/forms/fields/RelatedModelField.tsx +++ b/src/frontend/src/components/forms/fields/RelatedModelField.tsx @@ -75,42 +75,55 @@ export function RelatedModelField({ const [value, setValue] = useState(''); const [searchText] = useDebouncedValue(value, 250); + // Response to fetching a single instance + const fetchSingleCallback = useCallback( + (instance: any) => { + const pk_field = definition.pk_field ?? 'pk'; + + if (instance?.[pk_field]) { + // Convert the response into the format expected by the select field + const value = { + value: instance[pk_field], + data: instance + }; + + // Run custom callback for this field (if provided) + if (definition.onValueChange) { + definition.onValueChange(instance[pk_field], instance); + } + + setInitialData(value); + dataRef.current = [value]; + setPk(instance[pk_field]); + } + }, + [definition.pk_field, definition.onValueChange, setInitialData, setPk] + ); + // Fetch a single field by primary key, using the provided API filters const fetchSingleField = useCallback( - (pk: number) => { - if (!definition?.api_url) { - return; - } - - const params = definition?.filters ?? {}; - const url = `${definition.api_url}${pk}/`; - - api - .get(url, { - params: params - }) - .then((response) => { - const pk_field = definition.pk_field ?? 'pk'; - if (response.data?.[pk_field]) { - const value = { - value: response.data[pk_field], - data: response.data - }; - - // Run custom callback for this field (if provided) - if (definition.onValueChange) { - definition.onValueChange(response.data[pk_field], response.data); - } - - setInitialData(value); - dataRef.current = [value]; - setPk(response.data[pk_field]); - } + (pk: number | string) => { + if (definition.singleFetchFunction) { + definition.singleFetchFunction(pk)?.then((instance: any) => { + fetchSingleCallback(instance); }); + } else if (!!definition.api_url) { + const params = definition?.filters ?? {}; + const url = `${definition.api_url}${pk}/`; + api.get(url, { params: params }).then((response) => { + const instance = response.data; + fetchSingleCallback(instance); + }); + } else { + console.error( + `No API URL provided for related field ${fieldName}, cannot fetch data` + ); + } }, [ definition.api_url, definition.filters, + definition.singleFetchFunction, definition.onValueChange, definition.pk_field, setValue, @@ -380,6 +393,7 @@ export function RelatedModelField({ onValueChange: undefined, adjustFilters: undefined, exclude: undefined, + allow_null: undefined, read_only: undefined }; }, [definition]); diff --git a/src/frontend/src/components/importer/GlobalImporterDrawer.tsx b/src/frontend/src/components/importer/GlobalImporterDrawer.tsx new file mode 100644 index 0000000000..de4a5a7427 --- /dev/null +++ b/src/frontend/src/components/importer/GlobalImporterDrawer.tsx @@ -0,0 +1,22 @@ +import { useImporterState } from '../../states/ImporterState'; +import ImporterDrawer from './ImporterDrawer'; + +export default function GlobalImporterDrawer() { + const isOpen = useImporterState((state) => state.isOpen); + const sessionId = useImporterState((state) => state.sessionId); + const customFields = useImporterState((state) => state.customFields); + const closeImporter = useImporterState((state) => state.closeImporter); + + if (!isOpen || sessionId === null) { + return null; + } + + return ( + + ); +} diff --git a/src/frontend/src/components/importer/ImportDataSelector.tsx b/src/frontend/src/components/importer/ImportDataSelector.tsx index d91a94f776..0b09bf31e6 100644 --- a/src/frontend/src/components/importer/ImportDataSelector.tsx +++ b/src/frontend/src/components/importer/ImportDataSelector.tsx @@ -36,10 +36,12 @@ import { RenderRemoteInstance } from '../render/Instance'; function ImporterDataCell({ session, column, + fieldDef, row, onEdit }: Readonly<{ session: ImportSessionState; + fieldDef: any; column: any; row: any; onEdit?: () => void; @@ -63,22 +65,24 @@ function ImporterDataCell({ }, [row.errors, column.field]); const cellValue: ReactNode = useMemo(() => { - const field_def = session.availableFields[column.field]; + // const field_def = session.availableFields[column.field]; if (!row?.data) { return '-'; } - switch (field_def?.type) { + switch (fieldDef?.type) { case 'boolean': return ( ); case 'related field': - if (field_def.model && row.data[column.field]) { + if (fieldDef.model && row.data[column.field]) { return ( ); @@ -95,7 +99,7 @@ function ImporterDataCell({ } return value; - }, [row.data, column.field, session.availableFields]); + }, [fieldDef, row.data, column.field, session.availableFields]); const cellValid: boolean = useMemo( () => cellErrors.length == 0, @@ -127,9 +131,11 @@ function ImporterDataCell({ } export default function ImporterDataSelector({ - session + session, + customFields }: Readonly<{ session: ImportSessionState; + customFields?: ApiFormFieldSet | null; }>) { const api = useApi(); const table = useTable('dataimporter'); @@ -142,9 +148,11 @@ export default function ImporterDataSelector({ for (const field of selectedFieldNames) { // Find the field definition in session.availableFields const fieldDef = session.availableFields[field]; - if (fieldDef) { + const customField = customFields?.[field] ?? null; + + if (fieldDef || customField) { // Construct field filters based on session field filters - let filters = fieldDef.filters ?? {}; + let filters = fieldDef?.filters ?? {}; if (session.fieldFilters[field]) { filters = { @@ -159,15 +167,30 @@ export default function ImporterDataSelector({ fields[field] = { ...fieldDef, + ...customField, field_type: fieldDef.type, description: fieldDef.help_text, filters: filters }; + + console.log('Defined Field:', field); + console.log({ + ...fieldDef, + ...customField, + field_type: fieldDef.type, + description: fieldDef.help_text, + filters: filters + }); } } return fields; - }, [selectedFieldNames, session.availableFields, session.fieldFilters]); + }, [ + customFields, + selectedFieldNames, + session.availableFields, + session.fieldFilters + ]); const importData = useCallback( (rows: number[]) => { @@ -322,6 +345,10 @@ export default function ImporterDataSelector({ column={column} row={row} onEdit={() => editCell(row, column)} + fieldDef={{ + ...session.availableFields[column.field], + ...customFields?.[column.field] + }} /> ); } @@ -330,7 +357,7 @@ export default function ImporterDataSelector({ ]; return columns; - }, [session]); + }, [session, customFields]); const rowActions = useCallback( (record: any): RowAction[] => { diff --git a/src/frontend/src/components/importer/ImporterColumnSelector.tsx b/src/frontend/src/components/importer/ImporterColumnSelector.tsx index 8031495cac..83b420e812 100644 --- a/src/frontend/src/components/importer/ImporterColumnSelector.tsx +++ b/src/frontend/src/components/importer/ImporterColumnSelector.tsx @@ -15,7 +15,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { apiUrl } from '@lib/functions/Api'; -import type { ApiFormFieldType } from '@lib/types/Forms'; +import type { ApiFormFieldSet, ApiFormFieldType } from '@lib/types/Forms'; import { useDebouncedValue } from '@mantine/hooks'; import { useApi } from '../../contexts/ApiContext'; import type { ImportSessionState } from '../../hooks/UseImportSession'; @@ -77,9 +77,11 @@ function ImporterColumn({ function ImporterDefaultField({ fieldName, + customField, session }: { fieldName: string; + customField?: ApiFormFieldType | null; session: ImportSessionState; }) { const api = useApi(); @@ -162,8 +164,15 @@ function ImporterDefaultField({ }; } + if (customField) { + def = { + ...def, + ...customField + }; + } + return def; - }, [fieldName, session.availableFields, session.fieldDefaults]); + }, [fieldName, session.availableFields, session.fieldDefaults, customField]); return ( fieldDef && @@ -173,10 +182,12 @@ function ImporterDefaultField({ function ImporterColumnTableRow({ session, column, + customField, options }: Readonly<{ session: ImportSessionState; column: any; + customField?: ApiFormFieldType | null; options: any; }>) { return ( @@ -200,16 +211,22 @@ function ImporterColumnTableRow({ - + ); } export default function ImporterColumnSelector({ - session + session, + customFields }: Readonly<{ session: ImportSessionState; + customFields?: ApiFormFieldSet | null; }>) { const api = useApi(); @@ -279,6 +296,7 @@ export default function ImporterColumnSelector({ session={session} column={column} options={columnOptions} + customField={customFields?.[column.field] || null} /> ); })} diff --git a/src/frontend/src/components/importer/ImporterDrawer.tsx b/src/frontend/src/components/importer/ImporterDrawer.tsx index eb5a4343af..624c7067fb 100644 --- a/src/frontend/src/components/importer/ImporterDrawer.tsx +++ b/src/frontend/src/components/importer/ImporterDrawer.tsx @@ -14,6 +14,7 @@ import { IconCheck, IconExclamationCircle } from '@tabler/icons-react'; import { type ReactNode, useMemo } from 'react'; import { ModelType } from '@lib/enums/ModelType'; +import type { ApiFormFieldSet } from '@lib/index'; import { useImportSession } from '../../hooks/UseImportSession'; import useStatusCodes from '../../hooks/UseStatusCodes'; import { StylishText } from '../items/StylishText'; @@ -51,10 +52,12 @@ function ImportDrawerStepper({ export default function ImporterDrawer({ sessionId, + customFields, opened, onClose }: Readonly<{ sessionId: number; + customFields?: ApiFormFieldSet | null; opened: boolean; onClose: () => void; }>) { @@ -93,9 +96,16 @@ export default function ImporterDrawer({ switch (session.status) { case importSessionStatus.MAPPING: - return ; + return ( + + ); case importSessionStatus.PROCESSING: - return ; + return ( + + ); case importSessionStatus.COMPLETE: return ( diff --git a/src/frontend/src/components/items/LanguageSelect.tsx b/src/frontend/src/components/items/LanguageSelect.tsx index 3650603670..a975859bbf 100644 --- a/src/frontend/src/components/items/LanguageSelect.tsx +++ b/src/frontend/src/components/items/LanguageSelect.tsx @@ -49,7 +49,7 @@ export function LanguageSelect({ width = 80 }: Readonly<{ width?: number }>) { defaultValue={''} onChange={setValue} searchable - aria-label='Select language' + aria-label={t`Select language`} /> ); } diff --git a/src/frontend/src/components/items/OnlyStaff.tsx b/src/frontend/src/components/items/OnlyStaff.tsx index 192e748d53..709d75c69d 100644 --- a/src/frontend/src/components/items/OnlyStaff.tsx +++ b/src/frontend/src/components/items/OnlyStaff.tsx @@ -7,5 +7,7 @@ export const OnlyStaff = ({ children }: { children: any }) => { const [user] = useUserState(useShallow((state) => [state.user])); if (user?.is_staff) return children; - return This information is only available for staff users; + return ( + This information is only available for administrative users + ); }; diff --git a/src/frontend/src/components/modals/AboutInvenTreeModal.tsx b/src/frontend/src/components/modals/AboutInvenTreeModal.tsx index 56feea6e2c..dc478d56b7 100644 --- a/src/frontend/src/components/modals/AboutInvenTreeModal.tsx +++ b/src/frontend/src/components/modals/AboutInvenTreeModal.tsx @@ -8,8 +8,7 @@ import { Group, Space, Stack, - Table, - Text + Table } from '@mantine/core'; import type { ContextModalProps } from '@mantine/modals'; import { useQuery } from '@tanstack/react-query'; @@ -20,11 +19,11 @@ import { useShallow } from 'zustand/react/shallow'; import { api } from '../../App'; import { generateUrl } from '../../functions/urls'; import { useServerApiState } from '../../states/ServerApiState'; -import { useUserState } from '../../states/UserState'; import { CopyButton } from '../buttons/CopyButton'; import { StylishText } from '../items/StylishText'; import type { JSX } from 'react'; +import { OnlyStaff } from '../items/OnlyStaff'; type AboutLookupRef = { ref: string; @@ -42,15 +41,11 @@ export function AboutInvenTreeModal({ modalBody: string; }> >) { - const [user] = useUserState(useShallow((state) => [state.user])); - - if (!user?.is_staff) - return ( - - This information is only available for staff users - - ); - return ; + return ( + + + + ); } const AboutContent = ({ diff --git a/src/frontend/src/components/nav/Header.tsx b/src/frontend/src/components/nav/Header.tsx index 14725a6002..c935a388ba 100644 --- a/src/frontend/src/components/nav/Header.tsx +++ b/src/frontend/src/components/nav/Header.tsx @@ -1,8 +1,10 @@ import { ActionIcon, + Alert, Container, Group, Indicator, + Paper, Tabs, Text, Tooltip, @@ -13,7 +15,7 @@ import { useDocumentVisibility, useHotkeys } from '@mantine/hooks'; -import { IconBell, IconSearch } from '@tabler/icons-react'; +import { IconBell, IconSearch, IconUserBolt } from '@tabler/icons-react'; import { useQuery } from '@tanstack/react-query'; import { type ReactNode, useEffect, useMemo, useState } from 'react'; import { useMatch, useNavigate } from 'react-router-dom'; @@ -39,7 +41,7 @@ import { import { useUserState } from '../../states/UserState'; import { ScanButton } from '../buttons/ScanButton'; import { SpotlightButton } from '../buttons/SpotlightButton'; -import { Alerts } from './Alerts'; +import { Alerts, errorCodeLink } from './Alerts'; import { MainMenu } from './MainMenu'; import { NavHoverMenu } from './NavHoverMenu'; import { NavigationDrawer } from './NavigationDrawer'; @@ -53,7 +55,6 @@ export function Header() { const [server] = useServerApiState(useShallow((state) => [state.server])); const [navDrawerOpened, { open: openNavDrawer, close: closeNavDrawer }] = useDisclosure(navigationOpen); - const [ searchDrawerOpened, { open: openSearchDrawer, close: closeSearchDrawer } @@ -79,7 +80,7 @@ export function Header() { { open: openNotificationDrawer, close: closeNotificationDrawer } ] = useDisclosure(false); - const { isLoggedIn } = useUserState(); + const { isLoggedIn, user } = useUserState(); const [notificationCount, setNotificationCount] = useState(0); const globalSettings = useGlobalSettingsState(); const userSettings = useUserSettingsState(); @@ -128,6 +129,26 @@ export function Header() { else closeNavDrawer(); }, [navigationOpen]); + const [showSuperuserAlert, setShowSuperuserAlert] = useState(true); + + const showElevated = useMemo(() => { + if ( + user?.is_superuser && + globalSettings.isSet('INVENTREE_SHOW_SUPERUSER_BANNER', true) + ) { + return true; + } + + if ( + user?.is_staff && + globalSettings.isSet('INVENTREE_SHOW_ADMIN_BANNER', true) + ) { + return true; + } + + return false; + }, [user, showSuperuserAlert, globalSettings]); + const headerStyle: any = useMemo(() => { const sticky: boolean = userSettings.isSet('STICKY_HEADER', true); @@ -200,6 +221,23 @@ export function Header() { + {showElevated && (user?.is_superuser || user?.is_staff) && ( + + } + color={user.is_superuser ? 'red' : 'orange'} + title={user.is_superuser ? t`Superuser Mode` : t`Admin Mode`} + withCloseButton + onClose={() => setShowSuperuserAlert(false)} + p={5} + > + + {t`The current user has elevated privileges and should not be used for regular usage.`}{' '} + {errorCodeLink('INVE-W14')} + + + + )}
); } diff --git a/src/frontend/src/components/nav/Layout.tsx b/src/frontend/src/components/nav/Layout.tsx index 9607520db8..741f6d14ad 100644 --- a/src/frontend/src/components/nav/Layout.tsx +++ b/src/frontend/src/components/nav/Layout.tsx @@ -21,6 +21,7 @@ import { } from '../../states/SettingsStates'; import { useUserState } from '../../states/UserState'; import { Boundary } from '../Boundary'; +import GlobalImporterDrawer from '../importer/GlobalImporterDrawer'; import { ApiIcon } from '../items/ApiIcon'; import { useInvenTreeContext } from '../plugins/PluginContext'; import { callExternalPluginFunction } from '../plugins/PluginSource'; @@ -118,31 +119,34 @@ export default function LayoutComponent() { return ( - -
- - - - - {/* */} - - -